2012-02-23 61 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); 
} 
相關問題