Android listview项目单击不起作用
我看到过类似的问题,并尝试过解决方案,例如将focusable设置为false,但它仍然不起作用。以下是我的布局,其中包含listview:Android listview项目单击不起作用,android,listview,onclicklistener,Android,Listview,Onclicklistener,我看到过类似的问题,并尝试过解决方案,例如将focusable设置为false,但它仍然不起作用。以下是我的布局,其中包含listview: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_heigh
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/listView_open_groups"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/button_add_group"
android:layout_alignParentTop="true"
></ListView>
<Button
android:id="@+id/button_add_group"
android:text="Add Group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:focusable="false"
/>
<Button
android:id="@+id/button_add_entry"
android:text="Add Entry"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/button_add_group"
android:focusable="false"
/>
</RelativeLayout>
和我的自定义列表行
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:longClickable="true" >
<ImageView
android:id="@+id/imgView_group_entry_icon"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:focusable="false"
/>
<TextView
android:id="@+id/textView_group_entry_name"
android:layout_toRightOf="@id/imgView_group_entry_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"/>
<TextView
android:id="@+id/textView_group_entry_type"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"/>
</RelativeLayout>
和我的自定义适配器:
public class OpenDbListAdapter extends ArrayAdapter<KeepassDBGroupv1>{
Context context;
public OpenDbListAdapter(Context context, int resource,
List<KeepassDBGroupv1> objects) {
super(context, resource, objects);
this.context=context;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
KeepassDBGroupv1 rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.custom_list_row, null);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.textView_group_entry_name);
holder.imageView = (ImageView) convertView.findViewById(R.id.imgView_group_entry_icon);
holder.type = (TextView) convertView.findViewById(R.id.textView_group_entry_type);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.name.setText(rowItem.getGroupName());
holder.type.setText("Group");
Drawable d = context.getResources().getDrawable(context.getResources().getIdentifier("ic"+Integer.toString(rowItem.getImageId()), "drawable", context.getPackageName()));
holder.imageView.setImageDrawable(d);
//App.getDB().drawFactory.assignDrawableTo(holder.imageView, context.getResources(), rowItem.icon);
return convertView;
}
private class ViewHolder {
ImageView imageView;
TextView name;
TextView type;
}
}
公共类OpenDbListAdapter扩展了ArrayAdapter{
语境;
公共OpenDbListAdapter(上下文、int资源、,
列出对象){
超级(上下文、资源、对象);
this.context=context;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
KeepassDBGroupv1 rowItem=getItem(位置);
LayoutInflater mInflater=(LayoutInflater)上下文
.getSystemService(活动.布局\充气机\服务);
if(convertView==null){
convertView=mInflater.inflate(R.layout.custom\u list\u行,空);
holder=新的ViewHolder();
holder.name=(TextView)convertView.findViewById(R.id.TextView\u group\u entry\u name);
holder.imageView=(imageView)convertView.findViewById(R.id.imgView\u group\u entry\u图标);
holder.type=(TextView)convertView.findViewById(R.id.TextView\u group\u entry\u type);
convertView.setTag(支架);
}否则
holder=(ViewHolder)convertView.getTag();
holder.name.setText(rowItem.getGroupName());
holder.type.setText(“组”);
Drawable d=context.getResources().getDrawable(context.getResources().getIdentifier(“ic”+Integer.toString(rowItem.getImageId()),“Drawable”,context.getPackageName());
支架。imageView。可设置ImageDrawable(d);
//App.getDB().drawFactory.assignDrawableTo(holder.imageView,context.getResources(),rowItem.icon);
返回视图;
}
私有类视窗持有者{
图像视图图像视图;
文本视图名称;
文本视图类型;
}
}
最后,我是如何设置侦听器的:
public class OpenDbActivity extends Activity{
static ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_opendb);
db = MyApplication.keepassdb;
InitializeComponents();
}
private void InitializeComponents() {
lv = (ListView) findViewById(R.id.listView_open_groups);
OpenDbListAdapter adapter = new OpenDbListAdapter(this, R.layout.custom_list_row, childGroups);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.d("Something");
}
});
}
公共类OpenDbActivity扩展活动{
静态ListView lv;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_opendb);
db=MyApplication.keepassdb;
初始化组件();
}
私有void InitializeComponents(){
lv=(ListView)findViewById(R.id.ListView\u open\u groups);
OpenDbListAdapter=新的OpenDbListAdapter(此,R.layout.custom_list_行,子组);
低压设置适配器(适配器);
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
Log.d(“某物”);
}
});
}
有人知道问题出在哪里吗
设置后谢谢
android:focusable=“false”
对于ListView内容,请在ListView标记中添加
android:clickable=“true”
凝固后
android:focusable=“false”
对于ListView内容,请在ListView标记中添加
android:clickable=“true”
我也遇到了这个问题,我通过将click listener设置为
自定义适配器的convertView
克服了这个问题。我不知道这是一个好方法,但它解决了我的问题
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
KeepassDBGroupv1 rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.custom_list_row, null);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.textView_group_entry_name);
holder.imageView = (ImageView) convertView.findViewById(R.id.imgView_group_entry_icon);
holder.type = (TextView) convertView.findViewById(R.id.textView_group_entry_type);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.name.setText(rowItem.getGroupName());
holder.type.setText("Group");
Drawable d = context.getResources().getDrawable(context.getResources().getIdentifier("ic"+Integer.toString(rowItem.getImageId()), "drawable", context.getPackageName()));
holder.imageView.setImageDrawable(d);
//App.getDB().drawFactory.assignDrawableTo(holder.imageView, context.getResources(), rowItem.icon);
convertView.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Log.v("OpenDbListAdapter ","List View Clicked");
}
});
return convertView;
}
我也遇到了这个问题,我通过将click listener设置为自定义适配器的convertView
克服了这个问题。我不知道这是一个好方法,但它解决了我的问题
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
KeepassDBGroupv1 rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.custom_list_row, null);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.textView_group_entry_name);
holder.imageView = (ImageView) convertView.findViewById(R.id.imgView_group_entry_icon);
holder.type = (TextView) convertView.findViewById(R.id.textView_group_entry_type);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.name.setText(rowItem.getGroupName());
holder.type.setText("Group");
Drawable d = context.getResources().getDrawable(context.getResources().getIdentifier("ic"+Integer.toString(rowItem.getImageId()), "drawable", context.getPackageName()));
holder.imageView.setImageDrawable(d);
//App.getDB().drawFactory.assignDrawableTo(holder.imageView, context.getResources(), rowItem.icon);
convertView.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Log.v("OpenDbListAdapter ","List View Clicked");
}
});
return convertView;
}
其实没什么不对
但问题来自自定义列表行.xml
,当您单击列表视图项时
实际上,您单击了自定义列表中的其他标记。\u row.xml
这些标记不负责触发项ClickListener
将custom\u list\u row.xml
中标记的属性android:layout\u width
的值更改为“wrap\u content”
或删除标记,然后重试
其实没什么不对
但问题来自自定义列表行.xml
,当您单击列表视图项时
实际上,您单击了自定义列表中的其他标记。\u row.xml
这些标记不负责触发项ClickListener
将custom\u list\u row.xml中标记的属性android:layout\u width
的值更改为“wrap\u content”
,或删除标记,然后重试。尝试将此更改为您的相对布局
在您的自定义列表行.xml
@SimplePlan谢谢,我在包含listview标记的relativelayout中尝试了它,但仍然没有wotking@SimplePlan我想我在错误的布局文件中尝试过,我会尝试的again@SimplePlan不,仍然不工作,请尝试删除android:focusable=“false”
从您的相对布局的所有子级
尝试将此设置到您的相对布局
在您的自定义列表行.xml
@SimplePlan谢谢,我在包含listview标记的relativelayout中尝试了它,但仍然没有wotking@SimplePlan我想我在错误的布局文件中尝试过,我会尝试的again@SimplePlan不,仍然不工作,请尝试删除android:focusable=“false”
从您的相对布局的所有子项中
@bigO:android:genderantfocusability=“blocksDescendants”SimplePlan建议的哪个有效?我的带有文本视图和复选框的列表与此解决方案有效。我已将我的复选框设置为android:focusability=“false”,并设置为clickable=“true”对于ListView本身,它起到了作用。@bigO:android:genderantfocusability=“blocksDescendants”SimplePlan建议的方法有效吗?我的带有文本视图和复选框的列表适用于此解决方案。我已经为我的复选框设置了android:focusability='false',并设置了clickable=“true”因为ListView本身就起到了作用。谢谢你,这很有效,我不确定这是否是一个好方法,但是