Android 带有水平滚动视图的ListView单击不工作

Android 带有水平滚动视图的ListView单击不工作,android,android-listview,Android,Android Listview,所以很快我就有了一个带有自定义适配器的listView,它膨胀了一个包含horizontalScrollView以及textview等的视图。我遇到的问题是,当我尝试将侦听器附加到此listView时,它没有收到任何回调 我认为问题在于我的列表项包含一个滚动视图,它正在拦截点击事件(尽管我认为它应该只拦截其他手势) 代码。。。(我的列表项xml) 然后在我的onCreate中 lv.setAdapter(myobj.adapter); lv.setTextFilterEnabled(

所以很快我就有了一个带有自定义适配器的listView,它膨胀了一个包含horizontalScrollView以及textview等的视图。我遇到的问题是,当我尝试将侦听器附加到此listView时,它没有收到任何回调

我认为问题在于我的列表项包含一个滚动视图,它正在拦截点击事件(尽管我认为它应该只拦截其他手势)

代码。。。(我的列表项xml)


然后在我的onCreate中

lv.setAdapter(myobj.adapter);
    lv.setTextFilterEnabled(true);
    lv.setOnItemClickListener(new OnItemClickListener(){

        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            Log.w("dsdsds", "sdsdsds");
        }});
lv.setAdapter(myobj.adapter);
lv.setTextFilterEnabled(真);
lv.setOnItemClickListener(新的OnItemClickListener(){
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
//TODO自动生成的方法存根
Log.w(“DSDS”、“SDSDS”);
}});

如果您有任何帮助或建议,我们将不胜感激。

您可以在适配器的getView()方法中为linearMain调用setOnClickListener。

对于ScrollView,您应该使用OnTouchListener,例如:

private class ScrollViewOnTouchListener   implements OnTouchListener{
        HorizontalScrollView view;
        float historicX = Float.NaN;
        static final int DELTA_ON_CLICK = 20;
        long historicTime;
        int position;
        public ScrollViewOnTouchListener(HorizontalScrollView view, int position){
            this.view = view;
            this.position = position;
        }

        @Override
        public boolean onTouch(View v, MotionEvent event) 
        {
            switch (event.getAction()) 
            {
                case MotionEvent.ACTION_DOWN:
                historicX = event.getX();
                historicTime = System.currentTimeMillis();
                break;

                case MotionEvent.ACTION_UP:

                if (Math.abs(event.getX() - historicX) < DELTA_ON_CLICK)
                    // seems like onclick
                    // do what you want for onClick

                break;
                default: return false;
            }
            return true;
        }


    }

将其添加到最顶部的布局:

android:genderantfocusability=“blocksDescendants”


它帮了我的忙,现在McClickListener被解雇了。

Inside list_item.xml使用一些id标记布局:

<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                      xmlns:tools="http://schemas.android.com/tools"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent"
                      android:fillViewport="true">

    <LinearLayout
        android:id="@+id/layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

...
在下面的适配器中写入:

public interface OnClickInterface {
    void showItem(int position);
}
并在适配器的构造函数中分配回调:

public CustomAdapter(Context context, List<YourClass> list, OnClickInterface callback, int resId) {
    this.callback = callback;
    ...
公共CustomAdapter(上下文上下文、列表、OnClickInterface回调、int resId){ this.callback=回调; ... 在包含ListView的活动/片段中创建如下适配器:

CustomAdapter.OnClickInterface callback = new CustomAdapter.OnClickInterface() {
        @Override
        public void showItem(int position) {
            // Do something with an item.
        }
}
adapter = new Customdapter(getActivity(), new ArrayList<YourClass>(), callback, R.layout.list_item);
CustomAdapter.OnClickInterface回调=新建CustomAdapter.OnClickInterface(){
@凌驾
公共无效显示项(内部位置){
//对一件物品做点什么。
}
}
adapter=new Customdapter(getActivity(),new ArrayList(),callback,R.layout.list_项);

因此,所有答案都无法解决此问题,我也无法再访问代码库。如果有人遇到此问题并有已知的解决方案,我将接受将其放置在何处-在列表项的根布局中?@DroidWormNarendra是在项布局中
public interface OnClickInterface {
    void showItem(int position);
}
public CustomAdapter(Context context, List<YourClass> list, OnClickInterface callback, int resId) {
    this.callback = callback;
    ...
CustomAdapter.OnClickInterface callback = new CustomAdapter.OnClickInterface() {
        @Override
        public void showItem(int position) {
            // Do something with an item.
        }
}
adapter = new Customdapter(getActivity(), new ArrayList<YourClass>(), callback, R.layout.list_item);