使用removeAllViews()删除后,Android ListView不会收到itemClick事件,并使用addView进行恢复

时间:2012-04-22 11:58:49

标签: android events listview onitemclicklistener viewstack

我为我的Android应用程序实现了一个View堆栈系统,在推送新的View后,它会删除目标布局中的当前视图,将其存储在堆栈中,然后将新视图添加到布局中。

在我尝试存储然后恢复包含ListView的View之前,它完美无缺。这样做时,ListView不会收到任何itemClick事件,尽管它会滚动。

堆栈系统的代码如下:

Stack<View> viewStack;

public View pushView(View v) {
    // 1. Get reference to main content panel
    LinearLayout content = (LinearLayout) findViewById(R.id.contentPanel);
    View last = content.getChildAt(0);
    // Pushing old to stack
    viewStack.push(last);

    // 2. Clear it
    content.removeAllViews();

    // 3. Add new View
    content.addView(v);

    return last;
}

public View popView() {
    if (!viewStack.isEmpty()) {
        // 1. Get reference to main content panel
        LinearLayout content = (LinearLayout) findViewById(R.id.contentPanel);
        View last = content.getChildAt(0);

        // 2. Clear it
        content.removeAllViews();

        // 3. Add last View
        content.addView(viewStack.pop());
        // Pushing old to stack
        return last;
    } else {
        return null;
    }
}

奇怪的是,视图中包含ListView(CheckBoxes和Button)的其他项目会收到clickEvents。 我猜测: 1. ListView失去了焦点,因此它不会收到这些事件,或者 2. ListView已分离onItemClickListener

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果您在xml文件中的布局中将“clickable”设置为“true”,则将其从每个位置删除。然后你可以试试......

如果你只是在任何地方宣布。如果要声明“view_name.setClickable(true)”,则删除此行。如果你使用ontouchlistener,那么还有一件事就是返回false。实际上我遇到过类似的问题,我在listview行中使用listview和imageview。我的imageview正在接收点击事件,但listview没有收到onitemclick事件,因为我在我的布局中将imageview设置为可点击。