首页 > 解决方案 > 如何从 RecyclerView 适配器检索项目计数到另一个活动(不是父活动)?

问题描述

我一直在尝试将 recyclerview 适配器(TaskAdapter)中的项目数显示到一个活动(StatisticsActivity)中。我是初学者,所以如果我表现出低水平的理解,我深表歉意。

统计活动:

public class StatisticActivity extends AppCompatActivity implements TaskAdapter{

    TextView itemcount;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_statistic);

        itemcount = findViewById(R.id.itemcount);
        itemcount.setText(myTask.size());


    }
}

任务适配器:

  

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

    Context context;

    ArrayList<MyTask> myTask;

    public TaskAdapter(Context c, ArrayList<MyTask> p) {
        context = c;
        myTask = p;

    }


    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_task,viewGroup, false));
    }


    @Override
    public int getItemCount() {

        return myTask.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView titletask, desctask, datetask, keytask;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            titletask = (TextView) itemView.findViewById(R.id.titletask);
            desctask = (TextView) itemView.findViewById(R.id.desctask);
            datetask = (TextView) itemView.findViewById(R.id.datetask);
        }
    }


}

标签: javaandroidandroid-activityandroid-recyclerview

解决方案


事情就是这样。如果您在项目的某处有一个适配器,并且您在一个活动中想要适配器所持有的列表的大小......那么这可能是不可能的。

但是,如果您有一个显示项目列表的 recyclerview,并且如果您想StatisticActivity在单击 recyclerview 中的一项时转到该项目,则可以将列表中的项目数传递给StatisticActivity.

为此,您需要在 Adapter 中使用和接口,并在StatisticActivity.

在适配器中创建一个接口:

public interface OnItemClick {
    void onClick (int size);
}

StatisticActivity中,从适配器实现接口。

public class StatisticActivity extends AppCompatActivity implements OnItemClick {
      private int listSize;
      ......
      ......

      @Override
      void onClick (int size){
           listSize = size; // this is your list size from adapter.
      }
}

在适配器中

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

    Context context;
    OnItemClick mCallback;

    ArrayList<MyTask> myTask;

    public TaskAdapter(Context c, ArrayList<MyTask> p, OnItemClick listener) {
        context = c;
        myTask = p;
        this.mCallback = listener;
    }


    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_task,viewGroup, false));
    }


    @Override
    public int getItemCount() {
        mCallback.onClick(myTask.size());
        return myTask.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView titletask, desctask, datetask, keytask;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            titletask = (TextView) itemView.findViewById(R.id.titletask);
            desctask = (TextView) itemView.findViewById(R.id.desctask);
            datetask = (TextView) itemView.findViewById(R.id.datetask);
        }
    }

    public interface OnItemClick {
         void onClick (int size);
    }
}

推荐阅读