android:onClick只对listview中的第二次单击作出响应

android:onClick只对listview中的第二次单击作出响应,android,onclick,Android,Onclick,我发现了一个关于滚动listview和单击按钮的类似问题,但它对我没有帮助。我的问题是: 我有一个自定义行的列表视图。我有两种不同的listview状态;状态之间的切换是屏幕底部的一个按钮。第二种状态在每一行中都有删除按钮。当我单击特定行中的“删除”按钮时,该行将从数据库中删除,并更新listview。一切都很好,除了我需要点击删除按钮两次,它才能工作。下面是我处理点击的代码。flag==1是listview的第二种状态 public void onItemClick(AdapterView&l

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

我有一个自定义行的列表视图。我有两种不同的listview状态;状态之间的切换是屏幕底部的一个按钮。第二种状态在每一行中都有删除按钮。当我单击特定行中的“删除”按钮时,该行将从数据库中删除,并更新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();
                    }});
    }
}
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
视图main=parent.getChildAt(位置);
TextView delete=(TextView)main.findViewById(R.id.delete_按钮);
如果(标志==0){
切换到项目视图(id);
}
如果(标志==1){
delete.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mDbHelper.deleteList(id);
updateListView();
}});
}
}
我试图将父视图的focusableInTouchMode属性设置为false,正如另一篇文章中所建议的那样,但没有任何帮助

如果你能帮我解决这个问题我会很感激


提前谢谢。

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


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

花了几个小时后,我想出了如何做:

我将我的click listener从我的主活动类移动到我的自定义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中使用的列表)和数据库中删除列表。

您可能已经获得了焦点。移除它

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

我不认为这是因为国旗。当我删除这两个标志时,我仍然需要单击两次:(–如果可能的话,尝试在
onItemClick
-方法之外的
onCreate
中声明它。我也尝试过,但我必须在listview的clicklistener方法内声明它,否则它会因没有按id找到delete按钮而引发异常。无论如何,我想这是因为主布局没有膨胀。我没有确定您的代码是什么样子的,但如果可能,请尝试在
onCreate
中对其进行膨胀,然后为删除按钮添加
onClickListener