在Fragment中实现RecyclerView

5

我正在尝试在AppCompatActivity中的ViewPager中的Fragment中创建一个ListView。由于我使用了CoordinatorLayout,所以必须使用RecylerView。我试图按照developer.android.com上的培训进行操作,但我的应用程序在日志后停止工作。以下是我的代码,我的应用程序在此处停止。

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

//...

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_city_list, container, false)

    mRecyclerView = (RecyclerView) view.findViewById(android.R.id.list);
    mLayoutManager = new LinearLayoutManager(this.getActivity());
    Log.d("debugMode", "The application stopped after this");
    mRecyclerView.setLayoutManager(mLayoutManager);

    mAdapter = new RecyclerAdapter(getNames());
    mRecyclerView.setAdapter(mAdapter);
    return view;
}

//...

你能发布一下崩溃报告吗? - sha
3个回答

10

使用此功能

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_city_list, container, false)

    // Replace 'android.R.id.list' with the 'id' of your RecyclerView
    mRecyclerView = (RecyclerView) view.findViewById(android.R.id.list);
    mLayoutManager = new LinearLayoutManager(this.getActivity());
    Log.d("debugMode", "The application stopped after this");
    mRecyclerView.setLayoutManager(mLayoutManager);

    mAdapter = new RecyclerAdapter(getNames());
    mRecyclerView.setAdapter(mAdapter);
    return view;
}

您应该在RecyclerView上分别调用setLayoutManagersetAdapter方法。

此外,

mRecyclerView =(RecyclerView)view.findViewById(android.R.id.list);

您不应该使用android.R.id.list,因为您没有使用ListFragment。请将其替换为您XML布局中Recyclerviewid


1
哇!谢谢你!太晚了,我没看到 R.id.list 没有引用我的列表!我卡了好几个小时! - user3432681
我有一个问题,getNames 是从哪里来的? - TheCoderGuy
getNames() is a method that returns the list of data to populate the RecyclerView - Mohammed Aouf Zouag

0

你是否将android.R.id.list设置为RecyclerView的id?否则,你应该在xml文件中为RecyclerView设置一个id,像这样:

android:id="@+id/recyclerview"

并更改此行

mRecyclerView = (RecyclerView) view.findViewById(android.R.id.list);

mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);

0
public class HomeFragment extends Fragment {

private HomeViewModel homeViewModel;

public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    homeViewModel =
            ViewModelProviders.of(this).get(HomeViewModel.class);
    View root = inflater.inflate(R.layout.fragment_home, container, false);
    final TextView textView = root.findViewById(R.id.text_home);
    homeViewModel.getText().observe(this, new Observer<String>() {
        @Override
        public void onChanged(@Nullable String s) {
            textView.setText(s);
        }
    });
     FragmentActivity c = getActivity();
     RecyclerView recyclerView = root.findViewById(R.id.my_recycler_view);
    recyclerView.setLayoutManager(new GridLayoutManager(c, 2));

    List<VillageModel> villageModels=new ArrayList<>();
    VillageModel villageModel =new VillageModel("",0,0,0,0,0,0);
    villageModels.add(villageModel);
    VillageModel villageModel1 =new VillageModel("",0,0,0,0,0,0);
    VillageModel villageModel2 =new VillageModel("",0,0,0,0,0,0);
    villageModels.add(villageModel1);
    villageModels.add(villageModel2);
    VillageAdapter adapter = new VillageAdapter(c,villageModels);
    recyclerView.setAdapter(adapter);
    return root;
 }
}

将Recycle Adapter添加到onCreateView方法中的Home Fragment XML结构中。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scrollbars="vertical"
    />
</RelativeLayout>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接