【问题标题】:How to retrieve item count from RecyclerView adapter into another activity(not parent activity)?如何从 RecyclerView 适配器检索项目计数到另一个活动(不是父活动)?
【发布时间】:2026-01-31 09:55:01
【问题描述】:

我一直在尝试将 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);
        }
    }


}

【问题讨论】:

    标签: java android android-activity android-recyclerview


    【解决方案1】:

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

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

    为此,您需要在 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);
        }
    }
    

    【讨论】: