【发布时间】:2012-02-23 01:03:40
【问题描述】:
其实我以为 ListFragment 的ListView 应该是在OnActivityCreated 中创建的。
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
...initialize the namesList
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, namesList);
setListAdapter(adapter);
}
然后我访问onResume 中的ListView 以将OnTouchListener 添加到列表中的每一行(= 子项) 但是尚未将子项添加到 ListView - 尽管它们应该是由于上面onActivityCreated 中的代码应该可以期待。
@Override
public void onResume() {
super.onResume();
ListView lv = getListView();
int n1 = lv.getChildCount();
for (int ii = 0; ii < n1; ii++) {
View lineV = lv.getChildAt(ii);
lineV.setOnTouchListener(new MyTouchListener());
}
}
所以添加 OnTouchListener 的最后机会是在OnListItemClick。 (因为之前的ListView中没有孩子)
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
v.setPressed(false);
ListView lv = getListView();
int n1 = lv.getChildCount();
for (int ii = 0; ii < n1; ii++) {
View lineV = lv.getChildAt(ii);
lineV.setOnTouchListener(new MyTouchListener());
}
}
但即使在这里,OnTouchListeners 仍未添加到显示的行中。
只有在显示的名称列表中触摸了几行之后,OnTouchListener 才被添加并拦截了触摸。
但在那之前,普通的onListItemClick 会被触碰——我只是不想发生这种情况。
我只需要在显示列表时从一开始就将OnTouchListeners 添加到ListView 中的每一行,这样我就可以做任何我想做的事情,而不是让OnListItemClick 处理事件。
(我实际上想在按下线的同时拖动线 - OnListItemClick 仅在线未被触及后开始)
非常感谢!
【问题讨论】:
标签: android listview android-listview android-fragments