android:onClick仅响应listview中的第二次单击

时间:2011-10-31 21:16:28

标签: android onclick

我发现了一个关于滚动列表视图和按钮点击的类似问题,但它对我没有帮助。我的问题是:

我有一个包含自定义行的列表视图。我有两种不同的listview状态;状态之间的切换是屏幕底部的按钮。第二个状态在每行中都有删除按钮。当我单击特定行中的删除按钮时,该行将从数据库中删除并更新列表视图。一切都很好,除了我需要两次点击删除按钮才能使它工作。以下是我处理点击的代码。 flag == 1是listview的第二个状态。

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    View main = parent.getChildAt(position);
    TextView delete = (TextView)main.findViewById(R.id.delete_button);

    if(flag==0){
        switchToItemsView(id);
    }
    if(flag==1){
        delete.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mDbHelper.deleteList(id);
                        updateListView();
                    }});
    }
}

我尝试将父视图的focusableInTouchMode属性设置为false,如另一篇文章所示,但它没有帮助。

如果你能帮我解决这个问题,我将不胜感激,

提前谢谢。

3 个答案:

答案 0 :(得分:6)

可能你有焦点。删除它。

android:focusableInTouchMode="true"
android:focusable="true"

答案 1 :(得分:2)

您需要在实际标记检查之前声明onClickListener;在您的情况下,视图更改并使用该标志,并设置侦听器。下一次单击实际上会触发侦听器。

不相关,但您应该将第二个if更改为elseif,因为如果第一个被调用,则无法调用它。

答案 2 :(得分:2)

花了几个小时后,我想出了怎么做:

我将我的点击监听器从我的主活动类移动到我的自定义ListAdapter类,并将其修改为如下所示;

deleteButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int rowid = Integer.parseInt(rowIds.get(position));
        mDb.deleteList(rowid);
        lists.remove(position);
        notifyDataSetChanged();
    }
});

现在效果很好。当我单击“删除”按钮时,它会从ArrayList(ListAdapter中使用的列表)和数据库中删除列表。