2012-02-23 55 views
0

实际上我认为ListFragment的ListView应该是在OnActivityCreated中创建的。添加OnTouchListener到ListFragment中的每行ListView

@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); 

    } 

然后我访问onResumeListView到列表(=孩子)一个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捕捉的触动 - 我只是不想发生。

所有我需要的是当显示的列表,所以我可以做我想做的事情,而不是让OnListItemClick处理该事件的OnTouchListeners从一开始就加入到每一行的ListView

(其实我是想拖动行同时按下线 - OnListItemClick只有在启动后线一直不变)

非常感谢!

回答

0

我已经做了类似的事情,在向列表视图中的每一行添加一个监听器方面。

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

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); 
}