【问题标题】:Adding OnTouchListener to each line of ListView in ListFragment在ListFragment中ListView的每一行添加OnTouchListener
【发布时间】: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


    【解决方案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); 
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-11
        • 1970-01-01
        • 1970-01-01
        • 2017-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多