Есть ли супер простой пример List / ListAdapter для Android - PullRequest
21 голосов
/ 22 апреля 2010

У меня есть веб-сервис, который возвращает супер простой список объектов

MyObject [] data = webServiceCall ();

MyObject имеет 1 поле, которое я хочу отобразить, "Name" (т.е. data[0].Name)

Как я могу превратить это в занятие, в котором перечислены только имена этих объектов в прокручиваемом listActivity на Android. Я действительно путаюсь с курсорами и не уверен, что мне нужны курсоры, и я не уверен, какой тип адаптера реализовать (BaseAdapter, SimpleAdapter и т. Д.)

Так что, думаю, я ищу три вещи,

активность, адаптер и layout.xml

Просто пытаюсь разобраться с этим андроидом, определенно нуб здесь

Ответы [ 3 ]

44 голосов
/ 22 апреля 2010

так что я думаю, что я понял это с небольшим вдохновением от ответа RobGThai, я публикую код для всех желающих, я думаю, что я действительно не использовал пользовательский адаптер

Это очень простой пример, с которого я начал, поэтому, когда у меня это получилось, я убедился, что на моем «MyObject» есть метод toString (), чтобы он правильно отображался в списке, и я передал массив MyObject [] в конструктор "новый ArrayAdapter" вместо listItems

FooList.java

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class FooList extends ListActivity {
    String[] listItems = {"item 1", "item 2 ", "list", "android", "item 3", "foobar", "bar", }; 
    @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.temp);
         setListAdapter(new ArrayAdapter(this,  android.R.layout.simple_list_item_1, listItems));
     }

}

макет xml, который я использовал (temp.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ListView android:id="@android:id/list" android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <TextView android:id="@android:id/empty" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:text="Empty set" />
</LinearLayout>
10 голосов
/ 22 апреля 2010

делает вашу деятельность расширяющей ListActivity.

Тогда это должно помочь вам начать работу.

Object[] sArray = {"This", "is", 3.5, true, 2, "for", "bla"};
ArrayAdapter adp = new ArrayAdapter(this, android.R.layout.simple_list_item_1, sArray);
setListAdapter(adp);

Вторые параметры могут быть изменены на ваш предпочтительный макет.См. Документ API для получения дополнительной информации.

1 голос
/ 26 мая 2011

Вы также можете прикрепить AlertDialog к ListView, когда пользователь нажимает на ListItem. Ниже приведен рабочий код на случай, если кто-то попробует то же самое,

final ListView v = getListView();
v.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(final AdapterView<?> parentView, View view, int position,
        long id) {
    final String fileName = (String) parentView.getItemAtPosition(position);
    new AlertDialog.Builder(parentView.getContext()).setTitle("Upload").setMessage("Upload " + fileName +"?")
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface di, int arg1) {
                //do something here...
            }
        }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface di, int arg1) {
                di.dismiss();                           
            }
        }).show();
}   
});

Ключ в том, что вам нужно передать контекст вложенной активности в диалог. Я обнаружил это, когда getApplicationContext() потерпел неудачу со странным сообщением об ошибке.

...