首页 > 解决方案 > 我们如何为回收器视图的每个列表项(每一行)设置 onClickListener,为不同的列表对象设置不同的活动

问题描述

我需要为每个列表项设置OnClickListenerrecycler view
我想通过单击每个列表视图项导航到不同的活动。

到目前为止,我已经设法通过回调将点击位置传递给 then 列表中每个点击项目的相同活动。但是,我想在单击列表中的项目时开始不同的活动。

假设我要单击具有文本“dd”的行,然后它应该转到名为“abc”的活动

请帮我。请。

这是主要活动:

public class MainActivity extends AppCompatActivity implements WordAdapter.OnNoteListener {
    private RecyclerView recyclerView;
    private static final String TAG = MainActivity.class.getCanonicalName();

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

        recyclerView = findViewById(R.id.home_view);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);

        recyclerView.setLayoutManager(layoutManager);

        List<Word> wordList = new ArrayList<>();


        wordList.add(new Word(R.drawable.ic_launcher_background, "dd"));
        wordList.add(new Word(R.drawable.ic_launcher_background, "ss"));
        wordList.add(new Word(R.drawable.ic_launcher_background, "cc"));


        WordAdapter adapter = new WordAdapter(this);
        recyclerView.setAdapter(adapter);
        adapter.addItems(wordList);
    }

    @Override
    public void onNoteClick(int position) {
        Log.d(TAG, "clicked on the position:" + position);
Intent intent = new Intent(this, abc.class);
        this.startActivity(intent);
    }
}

这是名为 WordAdapter 的适配器:

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

    private List<Word> wordList;
    private OnNoteListener mOnNoteListener;

    public WordAdapter(List<Word> wordList, OnNoteListener onNoteListener) {
        this.wordList = wordList;
        this.mOnNoteListener = onNoteListener;
    }

    public WordAdapter(OnNoteListener onNoteListener) {
        this(new ArrayList<Word>(), onNoteListener);
    }

    public void addItems(List<Word> items) {
        wordList.addAll(items);
        notifyDataSetChanged();
    }

    public void clear() {
        wordList.clear();
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_items, viewGroup, false);
        return new ViewHolder(view, mOnNoteListener);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewholder, int position) {
        int resource = wordList.get(position).getImageResource();
        String title = wordList.get(position).getTitle();
        viewholder.setData(resource, title);
    }

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

    static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private ImageView imageView;
        private TextView title;

        private OnNoteListener onNoteListener;

        public ViewHolder(@NonNull View itemView, OnNoteListener onNoteListener) {
            super(itemView);

            imageView = itemView.findViewById(R.id.imageView);
            title = itemView.findViewById(R.id.word);
            this.onNoteListener = onNoteListener;

            itemView.setOnClickListener(this);
        }

        private void setData(int resource, String titleText) {
            imageView.setImageResource(resource);
            title.setText(titleText);
        }

        @Override
        public void onClick(View view) {
            onNoteListener.onNoteClick(getAdapterPosition());
        }
    }

    public interface OnNoteListener {
        void onNoteClick(int position);
    }
}

标签: androidandroid-activityandroid-recyclerviewonclicklisteneronitemclicklistener

解决方案


您的Adapter班级将有您interface喜欢的内容:

public class AdapterClass extends RecyclerView.Adapter<AdapterClass.Viewholder>{

private OnItemClick onItemClick;

public NotificationAdapter(Context context) {
       onItemClick = (OnItemClick)context;
    }

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

@Override
    public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {

holder.layout.setOnClickListener(v -> {
            onItemClick.onClick(position);
        });

    }
}

现在你Activity将实现这个接口,如下所示:

         public class MainActivity extends AppCompatActivity implements AdapterClass.OnItemClick {


                @Override
                public void onClick(int position) {
                    Log.d(TAG, "clicked on the position:" + position);
                    startNewActivity(position);
                }

                private void startNewActivity(int position){
                Intent intent = new Intent(MainActivity.this, NewActivity.class);
                //Pass your data here if required
                intent.putExtra("key_for_data", position); 

                startActivity(intent);
        }
    }

推荐阅读