适配器中的事件不停止发射

时间:2016-12-16 12:28:08

标签: android listview onclick

我在我的视图中为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);

        }
    });

当我只检查一次时,它会发送许多广播!我检查它的位置是相同的位置!这可能有帮助吗? 这是我的接收者

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));


                }
            }



    }
};

1 个答案:

答案 0 :(得分: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));