为什么我的ExpandableListView中的点击被忽略了?

时间:2011-07-14 13:14:20

标签: android expandablelistview

我有一个由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();

单击事件在我的ExpandableListView中失败但在普通ListView中失败的原因是什么?我可能遗漏了一些东西,但我不知道那可能是什么。

3 个答案:

答案 0 :(得分:20)

好的,解决方案非常简单。由于它是可扩展列表,因此列表本身会捕获项目单击以打开子元素。因此,永远不会调用事件处理程序。

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

答案 1 :(得分:2)

谢谢,我也想知道这件事。但有趣的是文档中的信息:

public void setOnItemClickListener(AdapterView.OnItemClickListener l) “注册在单击某个项目时调用的回调,并且调用者更喜欢接收ListView样式的位置而不是组和/或子位置。”。

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

答案 2 :(得分:1)

您实际上可以使用

  1. expandableListView.setOnGroupExpandListener 以便在展开时捕获事件
  2. expandableListView.setOnGroupCollapseListener 可在折叠时捕获事件。
  3. expandableListView.setOnGroupClickListener 以在展开或折叠时捕获事件
  4. 链接到开发者网站:

    https://developer.android.com/reference/android/widget/ExpandableListView.html