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