首页 > 解决方案 > OnClickListener in RecyclerView having image, text

问题描述

I want to show another activity when object of recycler view is clicked. For eg: if I clicked "dd" text or"image of that line" then I should go to activity named "AbcActivity".

It went to many site, saw youtube tutorial but didn't helped. please help me with it. Please help me out this is my last hope :(

I'm beginner in this, It'd be great if you can provide project.

This is main activity:

public class MainActivity extends AppCompatActivity implements WordAdapter.OnNoteListener {
    private RecyclerView recyclerView;
    @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"));

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

    @Override
    public void onNoteClick(int position) {
    }
}

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

    @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();
    }

    class viewholder extends RecyclerView.ViewHolder implements View.OnClickListener{

        private ImageView imageView;
        private TextView title;

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

            imageView = itemView.findViewById(R.id.image);
            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);
    }
}

This is word:

public class Word implements Parcelable {

   private int imageResource;
   private String title;

    public Word(int imageResource, String title) {
        this.imageResource = imageResource;
        this.title = title;
    }

    protected Word(Parcel in) {
        imageResource = in.readInt();
        title = in.readString();
    }

    public static final Creator<Word> CREATOR = new Creator<Word>() {
        @Override
        public Word createFromParcel(Parcel in) {
            return new Word(in);
        }

        @Override
        public Word[] newArray(int size) {
            return new Word[size];
        }
    };

    public int getImageResource() {
        return imageResource;
    }

    public String getTitle() {
        return title;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeInt(imageResource);
        parcel.writeString(title);
    }
}

标签: javaandroidandroid-intentandroid-recyclerviewonclicklistener

解决方案


你已经做了几乎所有事情。

剩下的实际上是处理您传递给适配器的侦听器在活动中让您知道的单击事件。

改变

@Override
public void onNoteClick(int position) {


}    

对此

@Override
public void onNoteClick(int position) {
   Intent intent = new Intent(context, AbcActivity.class);
   context.startActivity(intent);
}

在你的活动中


推荐阅读