Item在点击之后没有办法自动恢复

最近遇到的一个问题:Item在点击之后没有办法自动恢复,这个问题怎么解决

找到你menu的xml文件,把对应group的checkableBehavior从single变为none。
或者用下面的方法看看是否符合你的需求:
为item添加点击监听者,在里面设置item的isChecked为false
全选复制放进笔记
//navigationmenu是一个NavigationView对象
navigationmenu.getMenu().findItem(R.id.drawer_favourite).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
item.setChecked(false);
//do something
return false;
}
});

关于ListView点击无效,item无法相应点击事件的问题,网上有很多, 大致可分为俩种情况, 一种是 item中存在 ImageButton 等可以点击的组件,这会抢先获得ListView的焦点. 从而导致item点击失效......等等网上好多,不过今天我记录的是另一种情况, 就是ListView中只有TextView 其他什么都没有 ,还失效的情况, 用网上的两种常见的方法,都无济于事.
经过几番的测试, 发现是在适配器的getView中处理TextView的时候,调用了适配器的notifyDataSetChanged. 在notifyDataSetChanged之后导致item失去焦点.
之前,碰到过类似的问题, 就是由于在对话框中调用了适配器更新方法notifyDataSetChanged导致Activity失去焦点,影响屏蔽物理返回键的效果. 至于这个notifyDataSetChanged更新以后,哪个组件获得了焦点.还没有研究.先记录下,研究以后在补充这文章.
下面是摘自网络的相关点击item失效问题的解决方法.仅供参考.
最近有人问我,在Android里:

在自定义listView里面有按钮,然后setItemClickListener时不响应,网上很多关于这个的,但我都试过,貌似都解决不了。
其实刚开始学Android接触ListView时我也遇到此问题,在网上到处搜也难以找到相关解决方案,原因之一是网上原创文章少,转载居多,很多文章都雷同;原因之二在于自己英语不好,不敢上外文论坛去找。
后来经过自己的慢慢摸索终于解决了这个问题。
当朋友问我时,我一番简单讲解加几张代码截图就给他解决问题啦~
废话不多说,先上源代码:源代码
代码片段:
main.xml
[html] view plaincopyprint?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
android:id="@+id/lv_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_below="@+id/numxback"
android:cacheColorHint="#00000000"
android:drawSelectorOnTop="false"
android:fadingEdge="none"
android:fastScrollEnabled="true"
android:focusable="false"
android:divider="@null"
android:focusableInTouchMode="true"
android:listSelector="@drawable/itemselected" />

1
2
3
4
5
6
7
8
9
10
11
12
13
14
android:id="@+id/lv_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_below="@+id/numxback"
android:cacheColorHint="#00000000"
android:drawSelectorOnTop="false"
android:fadingEdge="none"
android:fastScrollEnabled="true"
android:focusable="false"
android:divider="@null"
android:focusableInTouchMode="true"
android:listSelector="@drawable/itemselected" />
在main布局里加入了一个列表控件,ListView,它的各个属性在此处不是重点,这里就不多说,看不懂的读者自己去网上搜吧!
datalist.xml
[html] view plaincopyprint?
<?xml version="1.0" encoding="utf-8"?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
android:id="@+id/tv_num"
android:layout_width="wrap_content"
android:layout_height="60px"
android:layout_centerVertical="true"
android:background="@drawable/number"
android:gravity="center"
android:paddingLeft="5px"
android:paddingRight="8px"
android:textColor="@android:color/white"
android:textSize="24sp" />

android:id="@+id/ib_edit"
android:layout_width="60px"
android:layout_height="60px"
android:layout_alignParentRight="true"
android:background="@drawable/edit"
android:onClick="OnItemEditClick"

android:paddingRight="5px" />

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
android:id="@+id/tv_numx"
android:layout_width="150px"
android:layout_height="60px"
android:layout_toRightOf="@+id/tv_num"
android:background="@drawable/number"
android:gravity="center_vertical"
android:singleLine="true"
android:textColor="@android:color/white"
android:textSize="24sp" />

android:id="@+id/tv_numy"
android:layout_width="150px"
android:layout_height="60px"
android:layout_toRightOf="@id/tv_numx"
android:layout_toLeftOf="@id/ib_edit"
android:background="@drawable/number"
android:gravity="center_vertical"
android:singleLine="true"
android:textColor="@android:color/white"
android:textSize="24sp" />

<?xml version="1.0" encoding="utf-8"?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
android:id="@+id/tv_num"
android:layout_width="wrap_content"
android:layout_height="60px"
android:layout_centerVertical="true"
android:background="@drawable/number"
android:gravity="center"
android:paddingLeft="5px"
android:paddingRight="8px"
android:textColor="@android:color/white"
android:textSize="24sp" />

android:id="@+id/ib_edit"
android:layout_width="60px"
android:layout_height="60px"
android:layout_alignParentRight="true"
android:background="@drawable/edit"
android:onClick="OnItemEditClick"
android:paddingRight="5px" />

android:id="@+id/tv_numx"
android:layout_width="150px"
android:layout_height="60px"
android:layout_toRightOf="@+id/tv_num"
android:background="@drawable/number"
android:gravity="center_vertical"
android:singleLine="true"
android:textColor="@android:color/white"
android:textSize="24sp" />

android:id="@+id/tv_numy"
android:layout_width="150px"
android:layout_height="60px"
android:layout_toRightOf="@id/tv_numx"
android:layout_toLeftOf="@id/ib_edit"
android:background="@drawable/number"
android:gravity="center_vertical"
android:singleLine="true"
android:textColor="@android:color/white"
android:textSize="24sp" />
列表控件单项布局,在里面加入了三个TextView,一个ImageButton,显示时三个TextView 在前面,最后一个ImageButton。
之前说到的按钮点击事件在Activity里用button.setOnClickListener的方式实现时会屏蔽/占用ListView单项单击事件,这里就在布局里加了一个android:onClick="OnItemEditClick",用于绑定按钮点击事件,然后在java代码中实现这个方法,记得须有一个View类型的参数。
MainActivity.java
[java] view plaincopyprint?
package com.test.customlistview;

import java.util.ArrayList;
import java.util.HashMap;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemLongClickListener;

public class MainActivity extends Activity {

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
ListView dataListView;

SimpleAdapter listAdapter;

ArrayList> list;

private int location;

Handler mHandler = new Handler() {

@Override  
public void handleMessage(Message msg) {  
    if (msg.arg1 == 1) {  

    } else if (msg.arg1 == 2) {  

    } else if (msg.arg1 == 4) {  
        if (msg.what == 1) {  
            dataListView.getChildAt(msg.arg2).setBackgroundResource(  
                    R.drawable.itemback);  
        }  
    }  
    super.handleMessage(msg);  
}  

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

dataListView = (ListView) findViewById(R.id.lv_list);

list = new ArrayList>();

int count = 20;

HashMap map;

for (int i = 1; i <= count; i++) {

map = new HashMap();

map.put("num", i+ "");

map.put("a1", "²=");

map.put("a2", ""+i*i);

list.add(map);

}

listAdapter = new SimpleAdapter(this, list, R.layout.datalist,

new String[] { "num", "a1", "a2" }, new int[] { R.id.tv_num,

R.id.tv_numx, R.id.tv_numy });

dataListView.setAdapter(listAdapter);

dataListView.setOnItemLongClickListener(new OnItemLongClickListener() {

public boolean onItemLongClick(AdapterView<?> arg0, View view,

int position, long id) {

location = position;

final View nowView = (View) view.findViewById(R.id.ib_edit);

Toast.makeText(getBaseContext(), "location=" + location, 2000)

.show();

OnClickListener listener = new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

if (which == 0) {

Toast.makeText(getBaseContext(), "编辑", Toast.LENGTH_LONG).show();

} else if (which == 1) {

Toast.makeText(getBaseContext(), "删除", Toast.LENGTH_LONG).show();

}

}

};

dataListView.getChildAt(location).setBackgroundResource(

R.drawable.item_frame);

Message message = new Message();

message.arg1 = 4;

message.arg2 = location;

message.what = 1;

mHandler.sendMessageDelayed(message, 500);

String[] Menu = { "编辑", "删除" };

        new AlertDialog.Builder(MainActivity.this).setItems(Menu,  
                listener).show();  
        return false;  
    }  
});  

}

public void OnItemEditClick(View v) {

RelativeLayout layout = (RelativeLayout) v.getParent();

TextView tv1=(TextView)layout.findViewById(R.id.tv_num);

TextView tv2=(TextView)layout.findViewById(R.id.tv_numx);

TextView tv3=(TextView)layout.findViewById(R.id.tv_numy);

ImageButton ib=(ImageButton)layout.findViewById(R.id.ib_edit);

String str="按钮"+tv1.getText()+"点击啦n"+tv1.getText()+tv2.getText()+tv3.getText();

Toast.makeText(getBaseContext(), str, Toast.LENGTH_LONG).show();

}

}
package com.test.customlistview;

import java.util.ArrayList;
import java.util.HashMap;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemLongClickListener;

public class MainActivity extends Activity {

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
ListView dataListView;
SimpleAdapter listAdapter;
ArrayList> list;
private int location;
Handler mHandler = new Handler() {

@Override
public void handleMessage(Message msg) {
    if (msg.arg1 == 1) {

    } else if (msg.arg1 == 2) {

    } else if (msg.arg1 == 4) {
        if (msg.what == 1) {
            dataListView.getChildAt(msg.arg2).setBackgroundResource(
                    R.drawable.itemback);
        }
    }
    super.handleMessage(msg);
}

};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dataListView = (ListView) findViewById(R.id.lv_list);
list = new ArrayList>();
int count = 20;
HashMap map;
for (int i = 1; i <= count; i++) {
map = new HashMap();
map.put("num", i+ "");
map.put("a1", "²=");
map.put("a2", ""+i*i);
list.add(map);
}
listAdapter = new SimpleAdapter(this, list, R.layout.datalist,
new String[] { "num", "a1", "a2" }, new int[] { R.id.tv_num,
R.id.tv_numx, R.id.tv_numy });
dataListView.setAdapter(listAdapter);
dataListView.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> arg0, View view,
int position, long id) {
location = position;
final View nowView = (View) view.findViewById(R.id.ib_edit);
Toast.makeText(getBaseContext(), "location=" + location, 2000)
.show();
OnClickListener listener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
Toast.makeText(getBaseContext(), "编辑", Toast.LENGTH_LONG).show();
} else if (which == 1) {
Toast.makeText(getBaseContext(), "删除", Toast.LENGTH_LONG).show();
}
}
};
dataListView.getChildAt(location).setBackgroundResource(
R.drawable.item_frame);
Message message = new Message();
message.arg1 = 4;
message.arg2 = location;
message.what = 1;
mHandler.sendMessageDelayed(message, 500);
String[] Menu = { "编辑", "删除" };

        new AlertDialog.Builder(MainActivity.this).setItems(Menu,
                listener).show();
        return false;
    }
});

}

public void OnItemEditClick(View v) {
RelativeLayout layout = (RelativeLayout) v.getParent();
TextView tv1=(TextView)layout.findViewById(R.id.tv_num);
TextView tv2=(TextView)layout.findViewById(R.id.tv_numx);
TextView tv3=(TextView)layout.findViewById(R.id.tv_numy);
ImageButton ib=(ImageButton)layout.findViewById(R.id.ib_edit);
String str="按钮"+tv1.getText()+"点击啦n"+tv1.getText()+tv2.getText()+tv3.getText();
Toast.makeText(getBaseContext(), str, Toast.LENGTH_LONG).show();
}
}
OnItemEditClick(View v)方法中通过v.getParent();找到她的容器控件,前面的(RelativeLayout)根据你自己的布局里的容器控件而定。然后即可使用该容器控件找到他的所有自控件,然后读者想干嘛就干嘛啦~
上面的dataListView.setOnItemLongClickListener实现ListView的item长按事件,我在这里加了一个显示两条菜单的对话框,用于进行其他操作,如编辑、删除等。
这里也可以实现ListView的点击事件,PS:这段代码是后来加的,直接嵌入源代码中即可,已调试无误。

[java] view plaincopyprint?
dataListView.setOnItemClickListener(new OnItemClickListener() {

1
2
3
4
5
6
7
@Override

public void onItemClick(AdapterView<?> arg0, View view, int arg2,

long arg3) {

TextView tv=(TextView)view.findViewById(R.id.tv_num);

Toast.makeText(getBaseContext(), "您点击了第" + tv.getText()+"行", 2000).show();

}

});

dataListView.setOnItemClickListener(new OnItemClickListener() {

1
2
3
4
5
6
7
@Override
public void onItemClick(AdapterView<?> arg0, View view, int arg2,
long arg3) {
TextView tv=(TextView)view.findViewById(R.id.tv_num);
Toast.makeText(getBaseContext(), "您点击了第" + tv.getText()+"行", 2000).show();
}
});修改后的MainActivity.java代码如下
[java] view plaincopyprint?
package com.test.customlistview;

import java.util.ArrayList;
import java.util.HashMap;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemLongClickListener;

public class MainActivity extends Activity {

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
ListView dataListView;

SimpleAdapter listAdapter;

ArrayList> list;

private int location;

Handler mHandler = new Handler() {

@Override  
public void handleMessage(Message msg) {  
    if (msg.arg1 == 1) {  

    } else if (msg.arg1 == 2) {  

    } else if (msg.arg1 == 4) {  
        if (msg.what == 1) {  
            dataListView.getChildAt(msg.arg2).setBackgroundResource(  
                    R.drawable.itemback);  
        }  
    }  
    super.handleMessage(msg);  
}  

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

dataListView = (ListView) findViewById(R.id.lv_list);

list = new ArrayList>();

int count = 20;

HashMap map;

for (int i = 1; i <= count; i++) {

map = new HashMap();

map.put("num", i+ "");

map.put("a1", "²=");

map.put("a2", ""+i*i);

list.add(map);

}

listAdapter = new SimpleAdapter(this, list, R.layout.datalist,

new String[] { "num", "a1", "a2" }, new int[] { R.id.tv_num,

R.id.tv_numx, R.id.tv_numy });

dataListView.setAdapter(listAdapter);

dataListView.setOnItemClickListener(new OnItemClickListener() {

    @Override  
    public void onItemClick(AdapterView<?> arg0, View view, int arg2,  
            long arg3) {  
        TextView tv=(TextView)view.findViewById(R.id.tv_num);  
        Toast.makeText(getBaseContext(), "您点击了第" + tv.getText()+"行", 2000).show();  
    }  
});  
dataListView.setOnItemLongClickListener(new OnItemLongClickListener() {  
    public boolean onItemLongClick(AdapterView<?> arg0, View view,  
            int position, long id) {  
        location = position;  
        final View nowView = (View) view.findViewById(R.id.ib_edit);  
        Toast.makeText(getBaseContext(), "location=" + location, 2000)  
                .show();  
        OnClickListener listener = new DialogInterface.OnClickListener() {  
            public void onClick(DialogInterface dialog, int which) {  
                if (which == 0) {  
                    Toast.makeText(getBaseContext(), "编辑", Toast.LENGTH_LONG).show();  
                } else if (which == 1) {  
                    Toast.makeText(getBaseContext(), "删除", Toast.LENGTH_LONG).show();  
                }  
            }  
        };  
        dataListView.getChildAt(location).setBackgroundResource(  
                R.drawable.item_frame);  
        Message message = new Message();  
        message.arg1 = 4;  
        message.arg2 = location;  
        message.what = 1;  
        mHandler.sendMessageDelayed(message, 500);  
        String[] Menu = { "编辑", "删除" };  

        new AlertDialog.Builder(MainActivity.this).setItems(Menu,  
                listener).show();  
        return false;  
    }  
});  

}

public void OnItemEditClick(View v) {

RelativeLayout layout = (RelativeLayout) v.getParent();

TextView tv1=(TextView)layout.findViewById(R.id.tv_num);

TextView tv2=(TextView)layout.findViewById(R.id.tv_numx);

TextView tv3=(TextView)layout.findViewById(R.id.tv_numy);

ImageButton ib=(ImageButton)layout.findViewById(R.id.ib_edit);

String str="按钮"+tv1.getText()+"点击啦n"+tv1.getText()+tv2.getText()+tv3.getText();

Toast.makeText(getBaseContext(), str, Toast.LENGTH_LONG).show();

}

}
package com.test.customlistview;

import java.util.ArrayList;
import java.util.HashMap;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemLongClickListener;

public class MainActivity extends Activity {

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
ListView dataListView;
SimpleAdapter listAdapter;
ArrayList> list;
private int location;
Handler mHandler = new Handler() {

@Override
public void handleMessage(Message msg) {
    if (msg.arg1 == 1) {

    } else if (msg.arg1 == 2) {

    } else if (msg.arg1 == 4) {
        if (msg.what == 1) {
            dataListView.getChildAt(msg.arg2).setBackgroundResource(
                    R.drawable.itemback);
        }
    }
    super.handleMessage(msg);
}

};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dataListView = (ListView) findViewById(R.id.lv_list);
list = new ArrayList>();
int count = 20;
HashMap map;
for (int i = 1; i <= count; i++) {
map = new HashMap();
map.put("num", i+ "");
map.put("a1", "²=");
map.put("a2", ""+i*i);
list.add(map);
}
listAdapter = new SimpleAdapter(this, list, R.layout.datalist,
new String[] { "num", "a1", "a2" }, new int[] { R.id.tv_num,
R.id.tv_numx, R.id.tv_numy });
dataListView.setAdapter(listAdapter);
dataListView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View view, int arg2,
            long arg3) {
        TextView tv=(TextView)view.findViewById(R.id.tv_num);
        Toast.makeText(getBaseContext(), "您点击了第" + tv.getText()+"行", 2000).show();
    }
});
dataListView.setOnItemLongClickListener(new OnItemLongClickListener() {
    public boolean onItemLongClick(AdapterView<?> arg0, View view,
            int position, long id) {
        location = position;
        final View nowView = (View) view.findViewById(R.id.ib_edit);
        Toast.makeText(getBaseContext(), "location=" + location, 2000)
                .show();
        OnClickListener listener = new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                if (which == 0) {
                    Toast.makeText(getBaseContext(), "编辑", Toast.LENGTH_LONG).show();
                } else if (which == 1) {
                    Toast.makeText(getBaseContext(), "删除", Toast.LENGTH_LONG).show();
                }
            }
        };
        dataListView.getChildAt(location).setBackgroundResource(
                R.drawable.item_frame);
        Message message = new Message();
        message.arg1 = 4;
        message.arg2 = location;
        message.what = 1;
        mHandler.sendMessageDelayed(message, 500);
        String[] Menu = { "编辑", "删除" };

        new AlertDialog.Builder(MainActivity.this).setItems(Menu,
                listener).show();
        return false;
    }
});

}

public void OnItemEditClick(View v) {
RelativeLayout layout = (RelativeLayout) v.getParent();
TextView tv1=(TextView)layout.findViewById(R.id.tv_num);
TextView tv2=(TextView)layout.findViewById(R.id.tv_numx);
TextView tv3=(TextView)layout.findViewById(R.id.tv_numy);
ImageButton ib=(ImageButton)layout.findViewById(R.id.ib_edit);
String str="按钮"+tv1.getText()+"点击啦n"+tv1.getText()+tv2.getText()+tv3.getText();
Toast.makeText(getBaseContext(), str, Toast.LENGTH_LONG).show();
}
}

原因:

若你的item中有button或者checkbox等控件,默认情况下焦点focus是最先交给这些子控件,而ListView的Item能被选中的基础是它能获取Focus焦点,所以,我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为false,这样ListView的Item就自动获得了Focus焦点的权限,也就可以被选中了,同时也会响应onItemClickListener中的onItemClick()方法。

解决办法:(以下两种办法任意一种都可)

1.将ListView的Item Layout中的所有子控件focusable属性设置为false

2.将item layout的根控件设置属性

android:descendantFocusability=”blocksDescendant”

这样Item Layout就屏蔽了所有子控件获取Focus焦点的权限,不需要针对Item Layout中的每一个控件重新设置focusable属性原因:

若你的item中有button或者checkbox等控件,默认情况下焦点focus是最先交给这些子控件,而ListView的Item能被选中的基础是它能获取Focus焦点,所以,我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为false,这样ListView的Item就自动获得了Focus焦点的权限,也就可以被选中了,同时也会响应onItemClickListener中的onItemClick()方法。

解决办法:(以下两种办法任意一种都可)

1.将ListView的Item Layout中的所有子控件focusable属性设置为false

2.将item layout的根控件设置属性

android:descendantFocusability=”blocksDescendant”

这样Item Layout就屏蔽了所有子控件获取Focus焦点的权限,不需要针对Item Layout中的每一个控件重新设置focusable属性