2014-09-05 6 views
5

मुझे एक रीसाइक्लिंग व्यू मिला है जो मेरे स्ट्रिंग एरे की सामग्री लोड कर रहा है जो ठीक काम करता है, हालांकि मैं एक नई गतिविधि खोलना चाहता हूं जिस पर उन्होंने देखा है।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); 

मैं प्रबंधित किया है ऑनक्लिक लिस्टनर को व्यूहोल्डर में जोड़ने के लिए और आउटपुट को प्रत्येक दृश्य को प्रत्येक क्लास को कौन सा क्लास सौंपा गया है, हालांकि मैं समझ नहीं सकता या काम नहीं कर सकता, दूसरी गतिविधि कैसे लॉन्च करूं।

वर्ग के नाम उदाहरण

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

मैं भी एक समाधान के लिए देख रहा था के लिए ClassOne.class की तरह कुछ होगा, और मैं इस पोस्ट पाया: 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

लिंक किया गया लेख उत्कृष्ट है। बहुत से उत्तर उत्तर क्लिक ईवेंट को संभाल सकते हैं, जब तक कि फ़ंक्शन स्वयं निहित हो (यानी लॉग फ़ाइल में लिखना)। यह एकमात्र समाधान है जिसे मैंने देखा है जो मूल कॉलिंग गतिविधि/टुकड़े को श्रोता पंजीकृत करने और ईवेंट हैंडलिंग को लेने की अनुमति देता है। पूरी तरह से सुनिश्चित नहीं है कि यह बिल्कुल इष्टतम है, लेकिन यह काम करता है। – ExactaBox

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

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, इस बारे में अतिरिक्त संदर्भ प्रदान करता है कि यह कैसे और/या समस्या का समाधान क्यों करता है, इसका उत्तर उत्तर के दीर्घकालिक मूल्य में सुधार होगा। – HiDeo

संबंधित मुद्दे