片段oncreate方法中的java空容器
我想在另一个活动中展示我的片段。起初一切都很好,但在编辑代码之后,我的片段没有出现。这是我的主要活动内容XML代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:app="http://schemas.安卓.com/apk/res-auto"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="ir.aftabeshafa.shafadoc.MainActivity"
tools:showIn="@layout/app_bar_main">
<fragment
安卓:id="@+id/headlines_fragment"
安卓:name="ir.aftabeshafa.shafadoc.CatFrag"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent" />
</LinearLayout>
和片段类:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.card_front, container, false);
for (int i = 0; i < imgs.size(); i++) {
CatModel catModel = new CatModel();
catModel.txt = cat[i];
catModel.imgid = imgs.get(i);
arrayList.add(catModel);
}
recyclerView = (RecyclerView) inflater.inflate(R.layout.card_front, container, false).findViewById(R.id.recycler);
StaggeredGridLayoutManager gridLayoutManager =
new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(gridLayoutManager);
recyclerView.setHasFixedSize(true);
catAdapter = new CatAdapter(arrayList);
recyclerView.setAdapter(catAdapter);
return view;
}
主要活动类别:
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
}
else {
super.onBackPressed();
}
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
调试应用程序时,fragment类中的容器为null。为什么会这样
# 1 楼答案
我发现我的问题是
findviewbyid
在片段类中。我改变了这一点:为此:
# 2 楼答案
当您应该使用之前已充气并分配给
view
的布局时,您正在从新充气的布局分配recyclverView
这意味着您返回的视图仍然有一个空的
recyclerView
。要修复此更改,请执行以下操作:致:
以便使用与返回的视图关联的
recyclerView