2016-09-27 19 views
6

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

उदाहरण के लिए:
आइए कहें कि आप सूची सूची में किसी आइटम पर पहले ही स्पर्श कर रहे हैं और उस समय के दौरान आप किसी अन्य आइटम को स्पर्श करने का प्रयास करते हैं, यह आपको नहीं देगा। Recyclerview कि अनुमति देता है।

क्लिक करने के लिए हम ListView की तरह काम करने के लिए रीसाइक्लिंग व्यू कैसे बना सकते हैं?

नीचे मेरी कार्यान्वयन

public class DataCardAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
    private Context mContext; 
    private ArrayList<Data> mDatas = new ArrayList<>(); 
    private Data mData; 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View card = LayoutInflater.from(mContext).inflate(R.layout.card, parent, false); 
     return new DataCardViewHolder(mContext, card, mData); 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     Data data = mDatas.get(position); 
     ((DataCardViewHolder)holder).configureDataCard(data); 
    } 

    public static class DataCardViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
     private Context mContext; 
     private Data mData; 

     public DataCardViewHolder(Context context, View view, Data data) { 
      super(view); 
      mContext = context; 
      mData= data; 
     } 

     public void configureDataCard(final Data data) { 
      mData= data; 
      itemView.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      Log.v("DataCardViewHolder","onClick with data: " + mData.getData().toString()); 
     } 
    } 
} 
+3

आप कैसे पता लगा रहे हैं कि आप एक ही समय में दो आइटमों पर क्लिक कर रहे हैं? –

+0

सूचीदृश्य के विपरीत पुनर्नवीनीकरण एक ही व्यवहार करता है – kgandroid

+0

@PramodYadav अच्छी तरह से क्लिक करने का मतलब स्पर्श करें और फिर अनछुए। शायद मुझे यह मेरे विवरण में अलग-अलग कहा जाना चाहिए था। असल में, मान लीजिए कि आप पहले से ही किसी सूची में किसी आइटम पर स्पर्श कर रहे हैं और उस समय के दौरान आप किसी अन्य आइटम को स्पर्श करने का प्रयास करते हैं, यह आपको नहीं देगा। Recyclerview की अनुमति देता है और यही वह है जो मुझे लगता है कि इस मुद्दे का कारण बन रहा है। – Kiki

उत्तर

6

मेरे RecyclerView प्रोग्राम के रूप में जावा में जोड़ने है, लेकिन एक्सएमएल में नहीं। और मैं यह कोशिश करते हैं और यह काम करता है: अपने RecyclerView एक्सएमएल में जोड़ने है

mRecyclerView.setMotionEventSplittingEnabled(false); 

, तो आप अपने RecyclerView में यह जोड़ने की कोशिश कर सकते हैं:

android:splitMotionEvents="false"; 

और अब इस सूची में आप एक आइटम पर क्लिक करते हैं और जाने दो मत, आप किसी अन्य आइटम पर क्लिक नहीं कर सकते हैं।

0

दुर्भाग्य से, RecyclerView आप के लिए है कि संभाल नहीं होगा। समय समाप्ति के साथ एक Handler बनाएँ:

public class DelayedClick { 
    protected boolean canClick = true; 
    protected Handler myHandler = new Handler(); 

    private Runnable mMyRunnable = new Runnable() 
    { 
     @Override 
     public void run() { 
      canClick = true; 
     } 
    }; 

    public boolean getState() { 
     if(canClick) { 
      myHandler.postDelayed(mMyRunnable, 200); 
      canClick = false; 
      return true; 
     } 
     else return false; 
    } 
} 

@Override 
public void onClick(View v) { 
    if (!reClick.getState()) { 
     return; 
    } 
    //Code to execute on click 
} 
+0

'रीसाइक्लर व्यू' 'एंड्रॉइड' का उपयोग करके यह ठीक है: splitMotionEvents = "false" ' – HBG

+0

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

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