【发布时间】:2014-12-31 10:59:07
【问题描述】:
我有一个ListView,每行有多个元素,如下所示:
list_element.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/global_container"
android:descendantFocusability="blocksDescendants"
android:layout_width="match_parent"
android:layout_height="match_parent">
<HorizontalScrollView
android:id="@+id/scrollview"
android:clickable="true"
android:focusable="false"
android:focusableInTouchMode="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none">
Fragment1.java 正在膨胀包含具有上述元素的列表视图的布局。
我需要能够捕获每个项目的单击事件,以在单击该项目时更改元素的颜色,并在单击另一个项目时将其恢复为原始颜色,因为新项目更改了元素颜色等等.
这意味着我试图在Fragment1.java 内部捕获OnItemClickListener:
if (rootView != null) {
myList = (ListView) rootView.findViewById(R.id.my_list);
}
ArrayList l = new ArrayList();
//Bogus list
for (int i=0; i<20; i++) {
l.add(new Object());
}
adapter = new MyListAdapter(l, getActivity());
myList.setAdapter(adapter);
final MyListAdapter ad = adapter;
myList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
ad.setClickedPosition(position);
ad.notifyDataSetChanged();
}
});
但是(我假设)HorizontalScrollView 的所有 Touch 事件都在捕获 click/touch... 事件,但我没有得到任何响应。如您所见,我尝试了android:descendantFocusability="blocksDescendants" 并来回更改焦点,但没有任何结果。
我还尝试在列表适配器中捕获不同的事件:
vi = inflater.inflate(R.layout.list_element, null, true);
vi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("aaa", "aaa");
}
});
和/或
horizontalScroll = vi.findViewById(R.id.scrollview);
horizontalScroll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("aaa", "aaa");
}
});
这两个选项都没有任何结果。然后我应该如何捕获列表中某个项目的点击事件并保持能够使用HorizontalScrollView?
【问题讨论】:
标签: android listview horizontalscrollview