2012-02-23 3 views
0

На самом деле я думал, что ListView из ListFragment был бы создан в OnActivityCreated.Добавление OnTouchListener в каждую строку ListView в ListFragment

@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 ловит прикосновения - чего я просто не хочу.

Все, что мне нужно, чтобы добавить OnTouchListeners к каждой строке в ListView с САМОГО НАЧАЛА при отображении списка, так что я могу делать все, что я хочу, вместо того, чтобы позволить OnListItemClick обрабатывать событие.

(я на самом деле хочу, чтобы перетащить линию вокруг, нажимая на линию - OnListItemClick только начинается после того, как линия была нетронутым)

Большое спасибо!

ответ

0

Я сделал что-то подобное раньше с точки зрения добавления слушателя в каждую строку в виде списка.

Что вам нужно сделать, так это создать подкласс ArrayAdapter. Затем в методе getView() установите свой MyTouchListener в качестве onTouchListener для вашего представления, прежде чем возвращать его.

1

Override onViewCreated и добавить слушателя там

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    ListView listView = getListView(); 
    MyListViewTouchListener touchListener = 
     new MyListViewTouchListener (listView); 
    listView.setOnTouchListener(touchListener); 
} 
Смежные вопросы