10

जो मैं मूल रूप से करने की कोशिश कर रहा हूं वह रीसाइक्लर व्यू में दिखाई देने वाली ऑब्जेक्ट्स को एक निश्चित टेक्स्ट व्यू आईडी पर क्लिक करने योग्य बनाता है क्योंकि मैं एक प्रोग्राम बना रहा हूं जो एक सूची में एक एल्बम कवर और इसके शीर्षक को दिखाता है। मुझे उन सभी बॉक्सों पर क्लिक करने में सक्षम होना चाहिए जो रीसाइक्लिंग व्यू बनाता है और टेक्स्टव्यू अन्य जानकारी (लेखक, प्रकाशित तिथि, हिट गाने इत्यादि) के साथ पॉप अप करते हैं, जब उसके बाद क्लिक किया जाता है और फिर बैक बटन (यदि संभव है) एल्बम सूची में वापस जाने के लिए। मैं इसे घंटों तक देख रहा हूं और यह समझ नहीं सकता कि ऑनक्लिक लिस्टनर को इसके लिए कैसे काम करना है। यदि आप जानते हैं कि उन्हें सुनने के लिए कोई सुझाव आईडी कैसे खुश है या नहीं। धन्यवाद!रीसाइक्लिंग व्यू में आप ऑनक्लिक लिस्टनर का उपयोग कैसे करते हैं?

package com.albumlist.albumlist; 

import android.content.Context; 
import android.content.Intent; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 
    private AlbumData[] itemsData; 

    public MyAdapter(AlbumData[] itemsData){ 
     this.itemsData = itemsData; 
    } 

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

     private TextView txtViewTitle; 
     private ImageView imgViewIcon; 

     public ViewHolder(View itemLayoutView) { 
      super(itemLayoutView); 
      itemLayoutView.setOnClickListener(this); 
      txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.album_title); 
      imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.album_icon); 
     } 

     @Override 
     public void onClick(View v) { 

     } 
    } 

    @Override 
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) { 

     View itemLayoutView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.data_layout, null); 

     ViewHolder viewHolder = new ViewHolder(itemLayoutView); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, int position) { 

     viewHolder.txtViewTitle.setText(itemsData[position].getTitle()); 
     viewHolder.imgViewIcon.setImageResource(itemsData[position].getImageUrl()); 
    } 

    @Override 
    public int getItemCount() { 
     return itemsData.length; 
    } 

} 
+1

क्लिक श्रोता सेट का एक विस्तार है भर में एक Fragment में श्रोताओं को लागू करता है का एक टुकड़ा है। श्रोता इंटरफ़ेस को परिभाषित करें और इसे पहले 'एडाप्टर' में और फिर 'ViewHolder' पर' onCreateViewHolder' में पास करें। हैंडलिंग क्लिक वास्तव में वैसे ही किया जाता है जैसे 'ListView' में। 'RecyclerView' से पहले भी आपको' ListView' के 'OnItemClickListener' कॉलबैक का उपयोग नहीं करना था, यही कारण है कि' RecyclerView' में अब और नहीं है। –

उत्तर

4

अवधारणा अच्छी तरह से टिप्पणी में Xaver Kapeller द्वारा अभिव्यक्त किया जाता है। यदि आप RecyclerView को ListView की पारंपरिक इंटरैक्शन के समान इंटरैक्शन प्रबंधित करने का एक आसान तरीका ढूंढ रहे हैं, तो गिटहब पर BigNerdRanch's recyclerview-multiselect लाइब्रेरी देखें। उनके पास एक नमूना ऐप है जिसे आप एक्सप्लोर कर सकते हैं, जो बहु-चयन की अतिरिक्त क्षमताओं के साथ OnClickListeners और OnLongClickListeners की श्रृंखला लागू करता है।

यहाँ कैसे BigNerdRanch एक Adapter और एक ViewHolder, जो इस मामले में वास्तव में आपके विचार धारक के अंदर पुस्तकालय की अपनी SwappingHolder.

public CrimeHolder(View itemView) { 
     super(itemView, mMultiSelector); 

     mTitleTextView = (TextView) itemView.findViewById(R.id.crime_list_item_titleTextView); 
     mDateTextView = (TextView) itemView.findViewById(R.id.crime_list_item_dateTextView); 
     mSolvedCheckBox = (CheckBox) itemView.findViewById(R.id.crime_list_item_solvedCheckBox); 
     itemView.setOnClickListener(this); 
     itemView.setLongClickable(true); 
     itemView.setOnLongClickListener(this); 
    } 

    public void bindCrime(Crime crime) { 
     mCrime = crime; 
     mTitleTextView.setText(crime.getTitle()); 
     mDateTextView.setText(crime.getDate().toString()); 
     mSolvedCheckBox.setChecked(crime.isSolved()); 
    } 

    @Override 
    public void onClick(View v) { 

     if (mCrime == null) { 
      return; 
     } 
     if (!mMultiSelector.tapSelection(this)) { 
      selectCrime(mCrime); 
     } 

    } 


    @Override 
    public boolean onLongClick(View v) { 

     ((AppCompatActivity) getActivity()).startSupportActionMode(mDeleteMode); 
     mMultiSelector.setSelected(this, true); 
     return true; 
    } 


} 


private class CrimeAdapter extends RecyclerView.Adapter<CrimeHolder> { 
    @Override 
    public CrimeHolder onCreateViewHolder(ViewGroup parent, int pos) { 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.list_item_crime, parent, false); 
     return new CrimeHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(CrimeHolder holder, int pos) { 
     Crime crime = mCrimes.get(pos); 
     holder.bindCrime(crime); 
     Log.d(TAG, "binding crime" + crime + "at position" + pos); 
    } 

    @Override 
    public int getItemCount() { 
     return mCrimes.size(); 
    } 
} 
संबंधित मुद्दे