View.performClick未触发

时间:2012-05-14 21:23:41

标签: android

我在适配器中有以下代码来处理CheckBox上的点击。 gview引用适配器的getView()

中的View参数

适配器代码:

        selected.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked)
                if (selection.size() == 0)
                    gview.performLongClick();
                else
                    gview.performClick();
            else
                if (selection.size() == 1)
                    gview.performLongClick();
                else
                    gview.performClick();
        }

    });

逻辑位于包含ListView的活动中,其中performLongClick()触发OnItemLongClickperformClick() 触发onItemClick() 但我的问题是它没有

活动代码:

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long itemId) {
    if (listMode == MODE_NAVIGATION){
        home.browserFragment.loadUrl(bookmarks.findById((int)itemId).getUrl());
        home.browserFragment.closeBookmarks();
    } else{
        updateMultipleItemsSelection((int)itemId);

    }
}

  @Override
   public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long itemId) {
    if (listMode == MODE_SELECTION){
        deactivateSelectionMode();
    }else{
        activateSelectionMode();
        updateMultipleItemsSelection((int)itemId);
    }
    return true;
}

有没有人看到这个问题的可能解决方案?

谢谢

2 个答案:

答案 0 :(得分:1)

因为复选框是可聚焦的,所以周围的列表视图项不是。尝试将listview项设置为XML中的焦点。如果这不起作用,您可以尝试将复选框设置为可聚焦(它仍然可以检查)。

答案 1 :(得分:0)

    enter code here
@Override
    public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) {
        // TODO Auto-generated method stub
        CheckBox cb = (CheckBox) v.findViewById(R.id.checkBox1);
        TextView tv = (TextView) v.findViewById(R.id.textView1);
        pi = (PackageInfo) arg0.getItemAtPosition(position);
        cb.performClick();
        if (cb.isChecked()) {
            checkedValue.add(tv.getText().toString());
        } else if (!cb.isChecked()) {
            checkedValue.remove(tv.getText().toString());
        }
    }