2015-06-02 2 views
2

Это мой обработчик для управления событиями щелчка, когда элемент выбран на экране ресайклера. Ничего особенного.Android: Recycler View, как заблокировать несколько событий onClick

 @Override 
    public void onBindViewHolder(NavigationLeftDrawerViewHolder holder, final int position) { 
     holder.setNavigationItemContent(titles[position], icons[position]); 
     holder.getEntireItem().setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if(onLeftNavigationDrawerItemSelected != null){ 
        onLeftNavigationDrawerItemSelected.onLeftNavigationDrawerItemSelected(position);          
       } 
      } 
     }); 
    } 

Однако проблема я имею, если я положил два пальца в списке т.е. одним пальца по пункту 1, а другой по пункту 3. Оба события будут обработаны, создающие два вида деятельности должна быть запущена. Как я буду препятствовать выбору другого предмета, пока другой удерживается?

ответ

0

У меня такая же проблема в течение нескольких месяцев, поэтому я показываю свое решение, но думаю, что должно быть лучшее решение. Я также буду ждать, когда кто-то предложит что-то лучшее для его реализации.

  1. Сделать SingletonClass что-то вроде этого:

    /** Created by Ceaggar on 7/17/15. */

    public class PreventListener { private static PreventListener instance; private boolean mIsClickEnable = true; private boolean mRunnableEnable = true;

    private PreventListener(){}

    private static synchronized PreventListener getInstance(){ if(instance == null){ instance = new PreventListener(); } return instance; }

    public static boolean getClickEnable(){

    return getInstance().verifyEnable(); 
    

    }

    частное булево verifyEnable() {

    if (mIsClickEnable){ 
        mIsClickEnable = false; 
        if (mRunnableEnable){ 
         mRunnableEnable = false; 
         new Handler().postDelayed(new Runnable() {@Override public void run(){ 
          mRunnableEnable = true; 
          mIsClickEnable = true; 
          System.gc(); 
         }}, 500); 
        } 
        return true; 
    } else { 
        return false; 
    }}} 
    
  2. использовать его.

@Override public void onBindViewHolder(NavigationLeftDrawerViewHolder holder, final int position) { holder.setNavigationItemContent(titles[position], icons[position]); holder.getEntireItem().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (PreventListener.getClickEnable()) { //intent } } }); }


PD: Я не знаю, чтобы говорить на английском очень хорошо, так что прошу прощения за это.

Смежные вопросы