Android 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

我看到过类似的问题,并尝试过解决方案,例如将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_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本身就起到了作用。谢谢你,这很有效,我不确定这是否是一个好方法,但是