我有一個RecyclerView,它正在加載我的字符串數組的工作正常,但是我想打開一個新的活動取決於他們按下了哪個視圖。在RecyclerView中調用ViewHolder的活動?
我所做的創建數組一樣被稱爲類,以便:
<array name="classes">
<item>ClassOne</item>
<item>ClassTwo</item>
<item>ClassThree</item>
<item>ClassFour</item>
</array>
這些被存儲在一個數組,並傳遞給我的MainActivityList適配器如下:
String[] classes = resource.getStringArray(R.array.classes);
MainActivityList adapter = new MainActivityList(titles,content, images, classes);
recyclerView.setAdapter(adapter);
我已經成功將OnClickListener添加到ViewHolder並輸出將什麼類分配給每個視圖的日誌,但是我無法弄清楚或得到工作,以及如何啓動另一個活動。
類名稱會是這樣的ClassOne.class例如
public class MainActivityList extends RecyclerView.Adapter<MainActivityList.ViewHolder> {
private String[] mTitles;
private String[] mContent;
private String[] mClasses;
private TypedArray mImages;
private Context context;
public MainActivityList(String[] titles, String[] content, TypedArray images, String[] classes) {
this.mTitles = titles;
this.mContent = content;
this.mImages = images;
this.mClasses = classes;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup,int i) {
final View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_main_card, viewGroup, false);
ViewHolder vh = new ViewHolder(v);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ViewHolder vh = (ViewHolder)v.getTag();
Log.v("DEBUG", "Clicked" + vh.classes);
}
});
return vh;
}
public void onBindViewHolder(ViewHolder holder, int position) {
holder.titleView.setText(mTitles[position]);
holder.contentView.setText(mContent[position]);
holder.imageView.setImageDrawable(mImages.getDrawable(position));
holder.classes = mClasses[position];
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView titleView;
public TextView contentView;
public ImageView imageView;
public String classes;
public ViewHolder(View v) {
super(v);
titleView = (TextView) v.findViewById(R.id.card_title);
contentView = (TextView) v.findViewById(R.id.card_content);
imageView = (ImageView)v.findViewById(R.id.card_image);
v.setTag(this);
}
}
@Override
public int getItemCount() {
return mTitles.length;
}
}
鏈接的文章非常好。只要函數是獨立的(即寫入日誌文件),許多SO答案可以處理點擊事件。這是我見過的唯一解決方案,它允許原始調用活動/片段註冊監聽器並接管事件處理。不完全確定它是否絕對最佳,但它的工作原理。 – ExactaBox 2014-11-30 05:45:41