【问题标题】:RecyclerView in Fragment – How to retrieve data from an Array ListFragment 中的 RecyclerView – 如何从数组列表中检索数据
【发布时间】:2018-02-12 19:06:00
【问题描述】:

所以我看到了这个tutorial,它在导航抽屉的片段中创建了一个回收器视图。在本教程中,数据存储在一个数组中。我现在要做的是将数据存储在 ArrayList 中。

这是我在“导师”片段中的代码:

   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() {
    }
}

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

【问题讨论】:

  • 请在此处发布崩溃日志

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


【解决方案1】:

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;
}

【讨论】:

    【解决方案2】:

    您已经在 onCreateView() 中初始化了您的utorAdapter,但是在 onCreateView 之前调用了 onCreate,因此您的适配器为空..只需像下面的代码一样编辑您的 onCreate..

    @Override
       public void onCreate(@Nullable Bundle         savedInstanceState)  
         {  super.onCreate(savedInstanceState);
             tutorAdapter = new MyAdapter(tutorModelList);
            getTutorData(); }
    

    【讨论】:

    • 试试还是会崩溃
    • 很着急……这是个愚蠢的错误……在手机上打字……比在电脑上打字难……@pavneet_singh……
    猜你喜欢
    • 2021-09-14
    • 2020-08-14
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2018-10-21
    相关资源
    最近更新 更多