Android onSelectedItemListener с ListView CHOICE_MODE_MULTIPLE - PullRequest
3 голосов
/ 24 декабря 2011

Я новичок в разработке Android и мне нужна помощь.

Прежде чем я начну с моего вопроса, спасибо за вашу помощь.

Хорошо, вот моя проблема:

У меня есть listView с включенным CHOICE_MODE_MULTIPLE.С помощью этого я могу выбрать некоторые элементы в моем listView.

Я хотел бы использовать выбор элемента в качестве события в моем коде, например, когда элемент выбран, я хотел бы отобразить тост (Выбран пункт «Имя элемента»).

Я не знаю, как это сделать, я прочитал кое-что о onSelectedItemListener, но не знаю, как его реализовать и использовать.

Еще раз спасибо за вашу помощь.

Вот решение этой проблемы: я составил список с выбранными элементами.Чтобы увидеть, какой itel выбран, я должен проверить, является ли id этого элемента списком.Если внутри, элемент выбран, если нет, элемент не выбран.

listeCapteurs.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {
    if (!mSelectedIndices.contains(position))
        {
        mSelectedIndices.add(position);
        System.out.println("Liste:" +mSelectedIndices );
        }
    else
        {mSelectedIndices.remove((Integer)position);
        System.out.println("Liste:" +mSelectedIndices );
        }
        Log.i(null, "Clicked item position = " + position );       
}});
}

Ответы [ 2 ]

1 голос
/ 24 декабря 2011

Читали ли вы 'Hello ListView demo' ?Это демонстрирует, как использовать OnItemClickListener.Теперь это может быть не совсем то, что вам нужно, но с точки зрения реализации, добавление OnItemSelectedListener идентично:

listview.setOnItemSelectedListener(new OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        // do something...
    }
}

Редактирует согласно комментариям ниже.

Вы можете попробовать явно установить выделение для определенного элемента после заполнения списка, чтобы увидеть, вызывает ли это OnItemSelected.Предполагая, что в вашем списке есть по крайней мере два элемента:

listview.setSelection(1); // select second item

// Edit2: На самом деле, это, вероятно, не будет иметь значения, прочитав документацию для setSelection .

Устанавливает текущий выбранный элемент. Если в сенсорном режиме, элемент не будет выбран , но он все равно будет располагаться надлежащим образом.(...)

В качестве альтернативы вы можете отслеживать выбранные элементы самостоятельно, используя OnItemClickListener, при условии, что при нажатии на элемент не выполняется никаких других действий - что имеет смысл на устройствах с сенсорным экраном, так какнет никакого способа провести различие между «выбором» и «щелчком».

List<Integer> mSelectedIndices = new ArrayList<Integer>();
//...
listview.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if (!mSelectedIndices.contains(position)) {
            mSelectedIndices.add(position);
        } else {
            mSelectedIndices.remove((Integer)position);
        }
    }
}

Я предполагаю, что в какой-то момент вы захотите что-то сделать с выбранными элементами, так что вы можете просто перебратьПриведенный выше список и захватить объекты, которые были нажаты / выбраны.

0 голосов
/ 24 декабря 2011

Это должно выглядеть примерно так ...

lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {

  // When clicked, show a toast with the TextView text
  Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
      Toast.LENGTH_SHORT).show();
}

});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...