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