在ListFragment中向ListView的每一行添加OnTouchListener

时间:2012-02-23 01:03:40

标签: android listview android-listview android-fragments

实际上我认为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);

    }

然后我访问ListView中的onResume,为列表中的每一行添加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会触及 - 我不想发生这种情况。

我需要的是在显示列表时,从{VERY BEGINNING'中OnTouchListeners的每一行添加ListView,这样我就可以做任何我想做的事情而不是OnListItemClick处理这个事件。

(我实际上想在按下线的同时拖动线条 - OnListItemClick仅在线条未被触及后开始)

非常感谢!

2 个答案:

答案 0 :(得分:1)

覆盖onViewCreated并在那里添加你的监听器

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ListView listView = getListView();
    MyListViewTouchListener touchListener =
        new MyListViewTouchListener (listView);
    listView.setOnTouchListener(touchListener); 
}

答案 1 :(得分:0)

在为列表视图中的每一行添加一个监听器方面,我之前做过类似的事情。

您需要做的是创建ArrayAdapter的子类。然后在getView()方法中,在返回之前将MyTouchListener设置为onTouchListener到视图中。