Создайте ListView с динамически генерируемыми действиями

#android

#Android

Вопрос:

Прямо сейчас у меня есть два действия. Моя цель — позволить пользователю ввести что-либо при первом действии и нажать «Отправить». Затем он использует поисковый запрос на сайте и извлекает объект json. Прямо сейчас у меня есть список имен в jsonarray. Что я хочу разрешить пользователю делать, так это нажимать на один из этих элементов в списке, и приложение будет получать более подробную информацию с другого URL.

Каков наилучший способ добиться этого? У меня уже работает окно поиска, генерируется связанный список с нужными мне именами, а также есть onclicklistener для каждого элемента списка. Как я могу включить в моем приложении выборку чего-то более подробного в зависимости от того, что они нажимают? Информация, необходимая для извлечения чего-либо, зависит либо от того, что указано в конкретном элементе списка, либо от того, могу ли я каким-то образом внедрить разные действия для каждого элемента списка при его динамическом создании.

Ответ №1:

Вместо использования OnClickListener вам следует использовать OnItemSelectedListener, затем в

 @Override
public void onItemSelected(AdapterView<?> parent,View v, int position, long row) {

//you are given the position in the adapterview for the selected item here.  get it and do something
//like 
Intent yourIntent=new Intent(Context, YourOtherAcitivty.class);
yourIntent.putExtra("something",YourObjectArray.get(position));
startActivityForResult(yourIntent,0);

 //OR

yourMethodToGetMoreData(position);


//etc...
}
  

Комментарии:

1. Итак, по сути, вы предлагаете, чтобы я создал массив для каждого элемента списка? Затем, когда кто-то нажимает на него, я извлекаю необходимые данные из массива?

2. Ну, у вас уже есть ListView (по крайней мере, это то, что я понял из вашего названия). Используйте любой массив, который вы используете, для заполнения listview. Вам не нужен массив для каждого элемента списка — сам элемент уже должен быть элементом массива, заполняющего listview.

3. Моя цель состоит в том, чтобы сделать это: отобразить имя из этого массива, но скрыть необходимую информацию, чтобы получать информацию о конкретном элементе при нажатии. Мне было интересно, есть ли способ сделать это.

4. Итак, создайте класс для хранения ваших данных, например общедоступный класс BananaBunches{ private int numBananas=0; поставщик частных строк = null; private int ripeness = 0; общедоступный void setNumBananas(int n) { numBananas=n;} общедоступный int getNumBananas() {return numBananas;} и т.д. … привяжите ваш listview к ArrayAdapter<BananaBunches> . в вашем пользовательском listadapter задайте для TextView вашего listview, например, количество бананов. но не отображайте поставщика. в выбранном onItemSelected выполните yourIntent.putExtra(«поставщик»,YourArray.GetPosition(позиция).getSupplier());

5. ах. я думал об этом, когда изначально начал создавать свое приложение, но совершенно забыл об этом! Спасибо!