簡體   English   中英

recyclerView 中的 onBindView() 方法面臨錯誤

[英]Facing error in onBindView() method in recyclerView

我只是在練習 RecyclerView。 當我運行應用程序時,我的應用程序崩潰了,我檢查了日志,但我無法理解問題可以幫助我等待某人回復嗎?

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {

    private model[] localDataSet;
    private TextView name,number;
    public static class ViewHolder extends RecyclerView.ViewHolder {
        private final TextView textView;

        public ViewHolder(View view) {
            super(view);
            textView = (TextView) view.findViewById(R.id.name);
        }

        public TextView getTextView() {
            return textView;
        }
    }
    public CustomAdapter(model[] dataSet) {
        localDataSet = dataSet;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        // Create a new view, which defines the UI of the list item
        View view = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.contacx, viewGroup, false);
        view.findViewById(R.id.name);
        view.findViewById(R.id.number);
        return new ViewHolder(view);
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int position) {


        name.setText(localDataSet[position].getName());
        number.setText(localDataSet[position].getPhone());
    }
    @Override
    public int getItemCount() {
        return localDataSet.length;
    }
}

在此處輸入圖像描述

您需要在代碼中更改以下內容:

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {

private model[] localDataSet;
//remove this from here.
//private TextView name,number;
public static class ViewHolder extends RecyclerView.ViewHolder {
    //This should be from the layout you have passed in ViewHolder method. in your case from R.layout.contacx. This layout should have two textview with ids:- name and phone respectively.
    private final TextView name, phone;

    public ViewHolder(View view) {
        super(view);
        name = view.findViewById(R.id.name);
        phone = view.findViewById(R.id.phone);
    }
}
public CustomAdapter(model[] dataSet) {
    localDataSet = dataSet;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
    // Create a new view, which defines the UI of the list item
    View view = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.contacx, viewGroup, false);
    //remvoe this from here.
    //view.findViewById(R.id.name);
    //view.findViewById(R.id.number);
    return new ViewHolder(view);
}

// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {

   //here you should call those view to bind your data like:
    viewHolder.name.setText(localDataSet[position].getName());
    viewHolder.phone.setText(String.valueOf(localDataSet[position].getPhone()));
}
@Override
public int getItemCount() {
    return localDataSet.length;
 }
}

使用 ViewHolder 進行數據綁定。 更安全

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
    private model[] localDataSet;

    public static class ViewHolder extends RecyclerView.ViewHolder {
        private final TextView name, number;
        public ViewHolder(View view) {
            super(view);
            name = view.findViewById(R.id.name);
            number = view.findViewById(R.id.phone);
        }

        public void bindData(model data) {
            name.setText(data.getName());
            number.setText(String.valueOf(data.getPhone()));
        }
    }

    public CustomAdapter(model[] dataSet) {
        localDataSet = dataSet;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        /* No Need
          View view = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.contacx, viewGroup, false);
          view.findViewById(R.id.name);
          view.findViewById(R.id.number);
         */
        return new ViewHolder(LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.contacx, viewGroup, false););
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int position) {
        /*
        name.setText(localDataSet[position].getName());
        number.setText(localDataSet[position].getPhone());
         */
        viewHolder.bindData(localDataSet[position]);
    }

    @Override
    public int getItemCount() {
        return localDataSet.length;
    }

   
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM