为什么我的可扩展列表视图中的点击无效?

11

我有一个通过ExpandableListView生成的AlertDialog。列表本身完美地工作,但出于某种原因,点击被忽略了。显然,我的点击处理程序从未被调用。

这是代码:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select something");
ExpandableListView myList = new ExpandableListView(this);
MyExpandableListAdapter myAdapter = new MyExpandableListAdapter();
myList.setAdapter(myAdapter);
myList.setOnItemClickListener(new ExpandableListView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, View v, int i, long l) {
        try {
            Toast.makeText(ExpandableList1.this, "You clicked me", Toast.LENGTH_LONG).show();
        }
        catch(Exception e) {
            System.out.println("something wrong here    ");
        }
    }
});
builder.setView(myList);
dialog = builder.create();
dialog.show();

如果我尝试使用普通的列表视图填充AlertDialog,则可以生成点击事件,没有任何问题:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select Color Mode");

ListView modeList = new ListView(this);
String[] stringArray = new String[] { "Bright Mode", "Normal Mode" };
ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, stringArray);
modeList.setAdapter(modeAdapter);
modeList.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
          // When clicked, show a toast with the TextView text
          Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
              Toast.LENGTH_SHORT).show();
        }
      });


builder.setView(modeList);
AlertDialog dialog1 = builder.create();
dialog1.show();

为什么在我的可扩展列表视图中点击事件失败,而在普通列表视图中却没有问题?我可能错过了什么,但我不知道具体是什么。

3个回答

20

好的,解决方案非常简单。由于它是一个可展开列表,项目点击由列表本身捕获以打开子元素。因此,事件处理程序从未被调用。

相反,您必须实现OnChildClickListener(),它 - 顾名思义 - 监听子项点击!


2

谢谢,我也在想这个问题。但是文档中的信息还是很有趣的:

public void setOnItemClickListener (AdapterView.OnItemClickListener l) “注册一个回调函数,当项目被点击时调用,并且调用者希望收到类似于ListView位置的位置而不是组和/或子位置。”

文档中明确提到,如果你想要设置和处理这个监听器,你应该能够做到...


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接