2014-09-05 76 views
5

我有一個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; 
    } 

} 

回答

10

我也一直在尋找一個解決方案,我發現這個職位: http://venomvendor.blogspot.sg/2014/07/setting-onitemclicklistener-for-recycler-view.html

通過使用OnItemClickListener接口,應該能夠在您的活動中致電startActivity

adapter.SetOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(View v , int position) { 
     // This is in an Activity so should be able to start new activity, etc. 


    } 
}); 

更新:我測試過了,博客中提到的方法對我有用。

+0

鏈接的文章非常好。只要函數是獨立的(即寫入日誌文件),許多SO答案可以處理點擊事件。這是我見過的唯一解決方案,它允許原始調用活動/片段註冊監聽器並接管事件處理。不完全確定它是否絕對最佳,但它的工作原理。 – ExactaBox 2014-11-30 05:45:41

8
Intent intent = new Intent(viewObject.getContext(),ActivityName.class); 
viewObject.getContext().startActivity(intent); 
+3

儘管此代碼可能會回答問題,但提供有關如何解決問題和/或爲何解決問題的其他上下文可以提高答案的長期價值。 – HiDeo 2016-07-16 07:58:53

相關問題