Добавление OnTouchListener к каждой строке ListView в ListFragment - PullRequest
0 голосов
/ 23 февраля 2012

На самом деле я думал, что ListView ListFragment будет создан в 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 перехватывает прикосновения - что я просто не хочу, чтобы это произошло.

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

(на самом деле я хочу перетащить линию, нажимая на нее - OnListItemClick начинается только ПОСЛЕ того, как линия не тронута)

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

Ответы [ 2 ]

1 голос
/ 13 января 2015

Переопределить onViewCreated и добавить туда своего слушателя

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ListView listView = getListView();
    MyListViewTouchListener touchListener =
        new MyListViewTouchListener (listView);
    listView.setOnTouchListener(touchListener); 
}
0 голосов
/ 12 марта 2012

Ранее я делал нечто подобное с точки зрения добавления слушателя к каждой строке в представлении списка.

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

...