java - Fragment 中的 RecyclerView – 如何从数组列表中检索数据

标签 java android android-fragments android-recyclerview navigation-drawer

所以我看到了这个tutorial在抽屉导航的 fragment 中创建一个回收 View 。在本教程中,数据存储在数组中。我现在想做的是将数据存储在 ArrayList 中。

这是我在“Tutor” fragment 中的代码:

   public class Tutors extends Fragment
{
    View myView;
    private ArrayList<TutorModel> tutorModelList = new ArrayList<>();
    private RecyclerView recyclerView;
    private MyAdapter tutorAdapter;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getTutorData();
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        myView = inflater.inflate(R.layout.admin_manage_tutors,
                container, false);
        recyclerView = myView.findViewById(R.id.recycler_view);

        tutorAdapter = new MyAdapter(tutorModelList);
        RecyclerView.LayoutManager mLayoutManager = new
                LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(tutorAdapter);
        return myView;
    }


    public void getTutorData()
    {
        TutorModel tutor = new TutorModel("Juan", "Computer Programming");
        tutorModelList.add(tutor);

        tutor = new TutorModel("Santiago", "French History");
        tutorModelList.add(tutor);

        tutor = new TutorModel("Jose", "Philippine History");
        tutorModelList.add(tutor);

        tutorAdapter.notifyDataSetChanged();

    }
}

这是我的适配器的代码:

public class MyAdapter extends
        RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    public List<TutorModel> tutorList;

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView name, subjects;

        public MyViewHolder(View view) {
            super(view);
            name = view.findViewById(R.id.name_tutor);
            subjects = view.findViewById(R.id.subjects_tutor);
        }
    }


    public MyAdapter(List<TutorModel> tutorList) {
        this.tutorList = tutorList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.tutor_list, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        TutorModel tutor = tutorList.get(position);
        holder.name.setText(tutor.getTutorName());
        holder.subjects.setText(tutor.getTutorSubject());
    }

    @Override
    public int getItemCount() {
        return tutorList.size();
    }
}

这是我的 getter/setter 代码:

public class TutorModel
{
    String tutorName, tutorSubject;

    public String getTutorName() {
        return tutorName;
    }

    public void setTutorName(String tutorName) {
        this.tutorName = tutorName;
    }

    public String getTutorSubject() {
        return tutorSubject;
    }

    public void setTutorSubject(String tutorSubject) {
        this.tutorSubject = tutorSubject;
    }

    public TutorModel(String tutorName, String tutorSubject) {
        this.tutorName = tutorName;
        this.tutorSubject = tutorSubject;
    }

    public TutorModel() {
    }
}

当我尝试运行该应用程序时,它崩溃了。

最佳答案

onCreateView 将在 onCreate 之后调用,但 getTutorData(); 正在通知适配器尚未由 onCreateView 初始化 因此,请在 getTutorData(); 方法调用之前初始化您的适配器

或者更好的方法是在onCreateView内调用getTutorData

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    myView = inflater.inflate(R.layout.admin_manage_tutors,
            container, false);
    recyclerView = myView.findViewById(R.id.recycler_view);

    tutorAdapter = new MyAdapter(tutorModelList);
    RecyclerView.LayoutManager mLayoutManager = new
            LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(tutorAdapter);
    getTutorData();
    return myView;
}

关于java - Fragment 中的 RecyclerView – 如何从数组列表中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48753723/

相关文章:

java - 是否可以通过异常将内容从 Rhino 传送到 Java?

java - 检查 WebElement 对象中是否存在元素

android - 选择中实现android gmail平板设计(箭头样式)

android - 如何在不使用 ffmpeg 的情况下在 node.js 中编码 h.264

android - 使用多个 DecoratedBarcodeView 时 View 保持黑色

java - spring boot从1.3.5更新到1.5.17后找不到log4j库

java - Tapestry5编译错误在服务定位器方法中返回服务接口(interface)

android - 工具栏和选项卡之间的线 - Android 5

java - Android:从 newInstance 传递 Extra 到 onCreate

java - Android Fragment 在第二次单击选项卡之前不会加载数据