Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 列表活动';s onListItemClick不起作用_Android_Android Listview_Adapter_Listactivity - Fatal编程技术网

Android 列表活动';s onListItemClick不起作用

Android 列表活动';s onListItemClick不起作用,android,android-listview,adapter,listactivity,Android,Android Listview,Adapter,Listactivity,在我的具有ListActivity的应用程序中,通过单击ListView项不会触发覆盖的onListItemClick回调 我用以下xml文件permissionview.xml定义了一个自定义listview <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_widt

在我的具有ListActivity的应用程序中,通过单击
ListView
项不会触发覆盖的
onListItemClick
回调

我用以下xml文件permissionview.xml定义了一个自定义listview

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn_Apply"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/btn_apply"
            android:onClick="onApplyClick" />

        <Button
            android:id="@+id/btn_install"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/btn_install"
            android:onClick="onInstallClick" />

        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Cancel" />

    </LinearLayout>

    <ListView android:id="@android:id/list" 
            android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="false">

    </ListView>  
</LinearLayout>
定义的
ArrayAdapter
定义如下:

     public class InteractiveArrayAdapter extends ArrayAdapter<Model> {


    private final List<Model> list;
    private final Activity context;
    private boolean changeable;

    public InteractiveArrayAdapter(Activity context, List<Model> list, boolean changeable) {
        super(context, R.layout.checkable, list);
        this.context = context;
        this.list = list;
        this.changeable = changeable;
    }

    static class ViewHolder {
        protected TextView text;
        protected CheckBox checkbox;
        protected ImageView image;
        protected int pos;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        if (convertView == null) {
            LayoutInflater inflater = context.getLayoutInflater();
                view = inflater.inflate(R.layout.checkable, null);


            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.text = (TextView) view.findViewById(R.id.label);
            viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
            viewHolder.image = (ImageView) view.findViewById(R.id.img);
            viewHolder.pos = position;


            view.setClickable(true);

            if (!changeable)viewHolder.checkbox.setEnabled(false);


            viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {



                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    Model element = (Model) viewHolder.checkbox.getTag();

                    element.setActive(buttonView.isChecked());
                }

            }
            );



            view.setTag(viewHolder);
            viewHolder.checkbox.setTag(list.get(position));

        } else {
            view = convertView;
            ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));

        }
        ViewHolder holder = (ViewHolder) view.getTag();
        holder.text.setText(list.get(position).showPermission());
        holder.checkbox.setChecked(list.get(position).isActive());

        if (list.get(position).isRedundant()) {
            holder.image.setImageDrawable(context.getResources().getDrawable(R.drawable.warning));
        } else {
            holder.image.setImageDrawable(context.getResources().getDrawable(R.drawable.ok));
        }
        return view;

    }

}
不会执行
onListItemClick
方法。在ArrayAdapter中定义onClickListener时,单击事件起作用:

 view.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {

                    System.out.println("Klick D1 " + list.get(viewHolder.pos));

                }

            });
为什么ArrayAdapter中的click事件定义有效,但ListActivity中的覆盖无效?我找不到失败。

如果您想要一个“常规”单击侦听器(适用于listview中的所有项目),您的活动应该实现一个“常规”单击侦听器

public class PermissionViewActivity extends ListActivity implements OnItemClickListener
您需要重写该方法

@Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3)
{
     Toast.makeText(this, "Clicked", Toast.LENGTH_SHORT).show();
}
如果您希望有一个“常规”单击侦听器(适用于listview中的所有项目),那么您的活动应该实现一个“常规”单击侦听器

public class PermissionViewActivity extends ListActivity implements OnItemClickListener
您需要重写该方法

@Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3)
{
     Toast.makeText(this, "Clicked", Toast.LENGTH_SHORT).show();
}

尝试将行布局中的
复选框设置为不可聚焦

//...
 <CheckBox
    android:id="@+id/check"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_marginLeft="4px"
    android:layout_marginRight="10px"
    android:focusable="false" 
    android:clickable="true">

//...
/。。。
//...

尝试将行布局中的
复选框设置为不可聚焦

//...
 <CheckBox
    android:id="@+id/check"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_marginLeft="4px"
    android:layout_marginRight="10px"
    android:focusable="false" 
    android:clickable="true">

//...
/。。。
//...

我通过以下方式在包含ListView的视图中执行此操作:

ListView lv = (ListView)findViewById(R.id.myList);
lv.setAdapter(new myCustomAdapter,items);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener(){
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id){
        /* do something i've been clicked */

});
ListView lv=(ListView)findviewbyd(R.id.myList);
lv.setAdapter(新的myCustomAdapter,项目);
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView arg0、视图arg1、整型位置、长id){
/*做一些我被点击过的事情*/
});
或者在一个选定的事件中

lv.setOnItemSelectedListener(new AdapterView.onItemSelectedListener(){
    public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id){
        ...
    }
    public void onNothingSelected(AdapterView<?> arg0){
        ...
    }
});
lv.setOnItemSelectedListener(新的AdapterView.onItemSelectedListener(){
已选择公共位置(AdapterView arg0、视图arg1、整型位置、长id){
...
}
未选择公共无效(AdapterView arg0){
...
}
});

希望这有帮助

我通过以下方式在包含ListView的视图中执行此操作:

ListView lv = (ListView)findViewById(R.id.myList);
lv.setAdapter(new myCustomAdapter,items);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener(){
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id){
        /* do something i've been clicked */

});
ListView lv=(ListView)findviewbyd(R.id.myList);
lv.setAdapter(新的myCustomAdapter,项目);
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView arg0、视图arg1、整型位置、长id){
/*做一些我被点击过的事情*/
});
或者在一个选定的事件中

lv.setOnItemSelectedListener(new AdapterView.onItemSelectedListener(){
    public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id){
        ...
    }
    public void onNothingSelected(AdapterView<?> arg0){
        ...
    }
});
lv.setOnItemSelectedListener(新的AdapterView.onItemSelectedListener(){
已选择公共位置(AdapterView arg0、视图arg1、整型位置、长id){
...
}
未选择公共无效(AdapterView arg0){
...
}
});

希望这对您有所帮助

如果您在ListItem中有可单击的视图,则需要将focusable标志设置为false。通过在布局中设置focusable=false,当以编程方式设置侦听器时,它将被覆盖

我的解决方案通过编程方式调用并设置焦点来为我工作

listview.setOnItemClickListener(this);
listview.setFocusable(false);

如果ListItem中有可单击的视图,则需要将focusable标志设置为false。通过在布局中设置focusable=false,当以编程方式设置侦听器时,它将被覆盖

我的解决方案通过编程方式调用并设置焦点来为我工作

listview.setOnItemClickListener(this);
listview.setFocusable(false);

阅读有关可聚焦问题的内容并尝试了此操作,但没有任何帮助。@user1411093您是否也尝试了
ListView
上的
android:genderantfocusability=“beforestendersons”
属性(并从
ListView
中删除
android:focusable=“false”
)(但保留
android:focusability=“false”
复选框中找到了解决方案,它是
android:genderantfocusability=“aftergenders”
感谢您的帮助。阅读有关聚焦问题的内容并尝试了此方法,但没有帮助。@user1411093您是否也尝试过
android:genderantfocusability=“beforesgenders”
列表视图上的属性(并从
列表视图中删除
android:focusable=“false”
)(但保留
复选框上的
android:focusable=“false”
)最终找到了解决方案,它是
android:genderantfocusability=“aftergenders”
感谢您的帮助。尝试了此操作,但无效。
getListView()
提供了一个对象,也可以使用
getOnItemClickListener
访问它,但侦听器没有“启动”当我单击时。我找不到问题所在,是否有任何选项可以阻止执行侦听器事件?是的!您的listview中有一个复选框,它将从listview中“窃取”单击功能。在checkable.xml中的标记下添加安卓:focusable=“false”是的,我发现,复选框“窃取”单击事件,当我为复选框设置
clickable=“false”
时,单击vor列表项起作用,但我需要两者,而focusable不起作用。最终找到了解决方案,它是
android:genderantfocusability=“aftergenders”
感谢您的帮助。尝试了这个,但没有起作用。
getListView()
传递一个对象,也可以使用
getOnItemClickListener
访问它,但是当我单击时,侦听器没有“激发”。我找不到问题,是否有任何选项可以阻止执行侦听器事件?是的!您的listview中有一个复选框,它实质上是“窃取”listview中的单击功能。在checkable.xml中的标记下添加android:focusable=“false”是的,我发现,当我设置
clickable=“false”时,checkbos“窃取”单击事件
对于复选框,click vor listitem起作用,但我需要两者,focusable不起作用。最终找到了解决方案,它是
android:DegenantFocusability=“AfterDegenders”
感谢您的帮助。我尝试了类似的方法,但我定义了
ListView lv=getListView()
。我不明白id
myList
是在哪里定义的?思想列表视图必须使用
@android:id/list
?I来定义