有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

片段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。为什么会这样


共 (2) 个答案

  1. # 1 楼答案

    我发现我的问题是findviewbyid在片段类中。我改变了这一点:

    recyclerView = (RecyclerView) inflater.inflate(R.layout.card_front, container, false).findViewById(R.id.recycler);
    

    为此:

    recyclerView = (RecyclerView) view.findViewById(R.id.recycler);
    
  2. # 2 楼答案

    当您应该使用之前已充气并分配给view的布局时,您正在从新充气的布局分配recyclverView

    这意味着您返回的视图仍然有一个空的recyclerView。要修复此更改,请执行以下操作:

    recyclerView = (RecyclerView) inflater.inflate(R.layout.card_front, container, false).findViewById(R.id.recycler);
    

    致:

    recyclerView = (RecyclerView) view.findViewById(R.id.recycler);
    

    以便使用与返回的视图关联的recyclerView