猿问

为什么我在使用带有片段的 RecyclerView 时不断收到空引用错误

我为我的应用程序使用片段。我还使用了一个导航抽屉,它通过抽屉中的按钮打开片段。


我试图用它的适配器和数组列表为我的 recyclerview 显示一些基本的图像和文本。


我遇到的问题是我不知道如何修改代码以对我的片段使用 recyclerview,因为我看到的所有教程都不使用片段。


以下是我的活动代码:


public class secondActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {


private DrawerLayout drawer;

private RecyclerView mRecyclerView;

private RecyclerView.Adapter mAdapter;

private RecyclerView.LayoutManager mLayoutManager;


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_second);


    ArrayList<exampleItemBooks> exampleList = new ArrayList<>();

    exampleList.add(new exampleItemBooks(R.drawable.artofwar, "Line 1", "Line 

    2"));

    exampleList.add(new exampleItemBooks(R.drawable.aristotle, "Line 3", 

    "Line 4"));

    exampleList.add(new exampleItemBooks(R.drawable.caesarbook, "Line 5", 

    "Line 6"));

    exampleList.add(new exampleItemBooks(R.drawable.platorepublic, "Line 7", 

    "Line 8"));

    exampleList.add(new exampleItemBooks(R.drawable.senecaletters, "Line 9", 

    "Line 10"));

    exampleList.add(new exampleItemBooks(R.drawable.thehistoryofmypeople, 

    "Line 11", "Line 12"));

    exampleList.add(new exampleItemBooks(R.drawable.theprince, "Line 13", 

    "Line 14"));

    exampleList.add(new exampleItemBooks(R.drawable.thritysixstrategems, 

    "Line 15", "Line 16"));

    exampleList.add(new exampleItemBooks(R.drawable.medidations, "Line 17", 

    "Line 18"));


    mRecyclerView = findViewById(R.id.recyclerViewBooks);

    mRecyclerView.setHasFixedSize(false);

    mLayoutManager = new LinearLayoutManager(this);

    mAdapter = new exampleBooksAdapter(exampleList);


    mRecyclerView.setLayoutManager(mLayoutManager);

    mRecyclerView.setAdapter(mAdapter);


    Toolbar toolbar = findViewById(R.id.toolbarMain);

    setSupportActionBar(toolbar);



料青山看我应如是
浏览 90回答 1
1回答

慕妹3242003

您的代码失败,因为您的 Activity 正在尝试访问RecyclerViewFragment 布局的一部分,并且您的 Fragment 布局在您调用后无法立即使用setContentView()(即使在您replace()操作之后,它也只能异步使用,因为您使用commit()而不是commitNow())。片段应该(尽可能)是自包含的。这意味着如果您的 Fragment 拥有RecyclerView,它应该负责将数据加载到其中:而不是您的 Activity。您应该将 Activity 中与 Fragment 接触的所有代码移至RecyclerViewFragment - 理想情况下,移动到诸如 之类的方法中onViewCreated(),该方法使您可以访问已膨胀的视图,onCreateView()并且是调用findViewById()和获取RecyclerView.
随时随地看视频慕课网APP

相关分类

Java
我要回答