Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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 OnItemClickListener和OnClickListener使用BaseAdapter不适用于ListView_Android_Listview_Baseadapter - Fatal编程技术网

Android OnItemClickListener和OnClickListener使用BaseAdapter不适用于ListView

Android OnItemClickListener和OnClickListener使用BaseAdapter不适用于ListView,android,listview,baseadapter,Android,Listview,Baseadapter,这是我不工作的代码 我使用'AsyncTask'从服务器获取数据,并使用'baseadapter'将数据设置为'listview',但使用'convertview.setonclicklistner'在适配器类中工作,并且在'Fragmentclass(import android.support.v4.app.Fragment;)中包含以下代码,所以我认为这没有问题 @Override public View onCreateView(LayoutInflater inflater, Vie

这是我不工作的代码

我使用'AsyncTask'从服务器获取数据,并使用'baseadapter'将数据设置为'listview',但使用'convertview.setonclicklistner'在适配器类中工作,并且在'Fragmentclass(import android.support.v4.app.Fragment;)中包含以下代码,所以我认为这没有问题

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    view= inflater.inflate(R.layout.fragment_restaurants, container, false);
    restaurant_list = (ListView)view.findViewById(R.id.restatrant_lv);

    no_restaturants=(TextView)view.findViewById(R.id.no_restaturants);

    // listening to single list item on click
    restaurant_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {

            Log.e("temp","temppppp");

        }
    });

    //set layout slide listener
    rowItems = new ArrayList<>();

    history_list = new ArrayList<HashMap<String, String>>();
    list_adapter = new ViewAdapter(getActivity(),rowItems);
    restaurant_list.setAdapter(list_adapter);
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment_,容器,假);
restaurant\u list=(ListView)view.findviewbyd(R.id.restarant\u lv);
no_restarants=(TextView)view.findViewById(R.id.no_restarants);
//在单击时侦听单个列表项
餐厅列表.setOnItemClickListener(新AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
Log.e(“temp”、“tempppp”);
}
});
//设置布局幻灯片侦听器
rowItems=新的ArrayList();
history_list=new ArrayList();
list_adapter=新的ViewAdapter(getActivity(),rowItems);
餐厅列表。设置适配器(列表适配器);
}
解决这个问题的办法是什么?

android:descendantFocusability="blocksDescendants"
如果任何ListView包含可聚焦或可单击的视图,则McClickListener将无法工作。在这种情况下,我们需要使用这个


设置适配器后,尝试设置setOnClickListener:

像这样:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    view= inflater.inflate(R.layout.fragment_restaurants, container, false);
    restaurant_list = (ListView)view.findViewById(R.id.restatrant_lv);

    no_restaturants=(TextView)view.findViewById(R.id.no_restaturants);


    //set layout slide listener
    rowItems = new ArrayList<>();

    history_list = new ArrayList<HashMap<String, String>>();
    list_adapter = new ViewAdapter(getActivity(),rowItems);
    restaurant_list.setAdapter(list_adapter);

// listening to single list item on click
        restaurant_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {

            Log.e("temp","temppppp");

        }
    });
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment_,容器,假);
restaurant\u list=(ListView)view.findviewbyd(R.id.restarant\u lv);
no_restarants=(TextView)view.findViewById(R.id.no_restarants);
//设置布局幻灯片侦听器
rowItems=新的ArrayList();
history_list=new ArrayList();
list_adapter=新的ViewAdapter(getActivity(),rowItems);
餐厅列表。设置适配器(列表适配器);
//在单击时侦听单个列表项
餐厅列表.setOnItemClickListener(新AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
Log.e(“temp”、“tempppp”);
}
});
}

将id添加到自定义\u列表\u item.xml的父布局中

holder.parentLayout.setOnClickListener(new OnClickItem(position));

private class OnClickItem implements View.OnClickListener{
    private int mPostion;

    public OnClickItem(int position){
        mPostion = position;
    }
    @Override
    public void onClick(View v) {
        YourActivity yourActivity = (YourActivity) mContext;
        yourActivity.onItemClicked(mPostion);
    }
}

是的,我也试过了,但还是不起作用…:(@Saccan你能发布你的.xml文件吗?你的xml文件中有任何可聚焦的项吗?这是xml文件@Mohammad nabilyeh的链接,我在listview中也添加了这两行代码..android:focusableInTouchMode=“false”android:focusable=“false”它在“yourActivity.onItemClicked(mPostion)”中显示错误这一行..但我已经在其他项目中使用过了,它是有效的,但在这个项目中不起作用…不知道为什么…甚至SetListViewHeightBasedOn儿童也不起作用