2016-12-16 5 views
0

Я установил setOnCheckedChangeListener для Checkbox в моем представлении, этот вид представляет строку в listView. Когда я проверяю этот флажок, функция onCheckedChanged() продолжает работать без остановок! как заставить его работать только один раз за проверку? этот код в адаптере listView:Событие в адаптере держит стрельбу без остановки

checkedItem.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      Log.d("--esmaSel--", "check result="+isChecked); 
      if(isChecked) { 
       if (!callRecorderClass.CheckedItemsIDs.contains(allCalls.get(position).getStringExtra(DBmanager.ID))) 
        callRecorderClass.CheckedItemsIDs.add(allCalls.get(position).getStringExtra(DBmanager.ID)); 
      } else { 
       Log.d("--esmaSel--", "remove---"); 
       callRecorderClass.CheckedItemsIDs.remove(allCalls.get(position).getStringExtra(DBmanager.ID)); 
      } 
      //todo:Send a BroadCast that change is made 

      Intent topMenuNoty=new Intent(); 
      Log.d("--esmaSel--", "will send BC"+position); 
      topMenuNoty.setAction("showHide"); 
      LocalBroadcastManager.getInstance(context). 
      sendBroadcast(topMenuNoty); 

     } 
    }); 

посылает много передач, когда я просто проверить его один раз! и я проверяю положение, это то же положение! может ли это помочь? ВОТ МОЯ RECEIVER

public BroadcastReceiver refresh = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Extract data included in the Intent 
     String action = intent.getAction(); 
     Log.d("--sel--", "got ShowHide"); 
     if (action.equals("showHide")) 
      { 
       Log.d("--sel--", "got " + action); 
       View v= findViewById(R.id.top_menu); 
       Log.d("--sel--", "null view "); 

       if(v==null) return; 
       if(CheckedItemsIDs.isEmpty()) 
        findViewById(R.id.top_menu).setVisibility(View.GONE); 
       else findViewById(R.id.top_menu).setVisibility(View.VISIBLE); 

       List<Intent> list= new DBmanager(context).getInboxCalls(); 
       if(list!=null&&list.size()>0) { 
        ListView inboxCalls = (ListView) findViewById(R.id.indexCalls); 
        inboxCalls.setAdapter(new inboxAdapter(context,R.layout.incox_call_row,list)); 


       } 
      } 



    } 
}; 
+0

использование концепции флага. если u хочет только один раз быть выполненным – Athul

+0

Можете ли вы опубликовать свой трансляционный приемник? – Hahn

+0

см. Отредактированный вопрос. – EsmaeelQash

ответ

0

нормально я вижу, что setAdapter в приемнике должны быть удалены, я просто удалить эти строки и теперь все в порядке:

   List<Intent> list= new DBmanager(context).getInboxCalls(); 
      if(list!=null&&list.size()>0) { 
       ListView inboxCalls = (ListView) findViewById(R.id.indexCalls); 
       inboxCalls.setAdapter(new inboxAdapter(context,R.layout.incox_call_row,list));