Mengisi ListView menggunakan ArrayList?

109

AndroidAplikasi saya perlu mengisi ListViewmenggunakan data dari ArrayList.

Saya kesulitan melakukan ini. Bisakah seseorang membantu saya dengan kode?

kAnNaN
sumber

Jawaban:

228

Anda perlu melakukannya melalui ArrayAdapteryang akan menyesuaikan ArrayList Anda (atau koleksi lainnya) ke item Anda dalam tata letak Anda (ListView, Spinner, dll.).

Inilah yang dikatakan oleh panduan pengembang Android :

A ListAdapteryang mengelola ListViewdidukung oleh larik objek arbitrer. Secara default, kelas ini mengharapkan bahwa id sumber daya yang diberikan mereferensikan satu TextView. Jika Anda ingin menggunakan tata letak yang lebih kompleks, gunakan konstruktor yang juga menggunakan id kolom. ID bidang itu harus merujuk TextViewpada sumber daya tata letak yang lebih besar.

Bagaimanapun yang TextViewdireferensikan, itu akan diisi dengan toString()masing-masing objek dalam array. Anda dapat menambahkan daftar atau array objek kustom. Ganti toString()metode objek Anda untuk menentukan teks apa yang akan ditampilkan untuk item dalam daftar.

Untuk menggunakan sesuatu selain TextViewsuntuk tampilan larik, misalnya ImageViews, atau agar beberapa data selain toString()hasil mengisi tampilan, timpa getView(int, View, ViewGroup)untuk mengembalikan tipe tampilan yang Anda inginkan.

Jadi kode Anda akan terlihat seperti:

public class YourActivity extends Activity {

    private ListView lv;

    public void onCreate(Bundle saveInstanceState) {
         setContentView(R.layout.your_layout);

         lv = (ListView) findViewById(R.id.your_list_view_id);

         // Instanciating an array list (you don't need to do this, 
         // you already have yours).
         List<String> your_array_list = new ArrayList<String>();
         your_array_list.add("foo");
         your_array_list.add("bar");

         // This is the array adapter, it takes the context of the activity as a 
         // first parameter, the type of list view as a second parameter and your 
         // array as a third parameter.
         ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                 this, 
                 android.R.layout.simple_list_item_1,
                 your_array_list );

         lv.setAdapter(arrayAdapter); 
    }
}
Amokrane Chentir
sumber
1
@ Amokrane Chentir: saya tidak bisa mendapatkan Anda ..... bisakah kamu mengetik program lengkapnya .... terima kasih
kAnNaN
1
@KanNN: Tentu, dapatkah Anda melihat apakah suntingan saya lebih eksplisit untuk Anda?
Amokrane Chentir
1
@ Amokrane Chentir: Saya pikir metode "setContentView" harus dipanggil sebelum "findViewById" atau ListView tidak akan ditemukan.
Petru
Daftar <String> tidak dikenali. Mengapa? Saya menggunakan studio android.
Ali.Rashidi
14

tutorial

Lihat juga antarmuka ArrayAdapter :

ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
Sanjit Saluja
sumber
11

Coba jawaban di bawah ini untuk mengisi listview menggunakan ArrayList

public class ExampleActivity extends Activity
{
    ArrayList<String> movies;

    public void onCreate(Bundle saveInstanceState)
    {
       super.onCreate(saveInstanceState);
       setContentView(R.layout.list);

       // Get the reference of movies
       ListView moviesList=(ListView)findViewById(R.id.listview);

       movies = new ArrayList<String>();
       getMovies();

       // Create The Adapter with passing ArrayList as 3rd parameter
       ArrayAdapter<String> arrayAdapter =      
                 new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, movies);
       // Set The Adapter
       moviesList.setAdapter(arrayAdapter); 

       // register onClickListener to handle click events on each item
       moviesList.setOnItemClickListener(new OnItemClickListener()
       {
           // argument position gives the index of item which is clicked
           public void onItemClick(AdapterView<?> arg0, View v,int position, long arg3)
           {
               String selectedmovie=movies.get(position);
               Toast.makeText(getApplicationContext(), "Movie Selected : "+selectedmovie,   Toast.LENGTH_LONG).show();
           }
        });
    }

    void getmovies()
    {
        movies.add("X-Men");
        movies.add("IRONMAN");
        movies.add("SPIDY");
        movies.add("NARNIA");
        movies.add("LIONKING");
        movies.add("AVENGERS");   
    }
}
KarthikKPN
sumber
2
public class Example extends Activity
{
    private ListView lv;
    ArrayList<String> arrlist=new ArrayList<String>();
    //let me assume that you are putting the values in this arraylist
    //Now convert your arraylist to array

    //You will get an exmaple here

    //http://www.java-tips.org/java-se-tips/java.lang/how-to-convert-an-arraylist-into-an-array.html 

    private String arr[]=convert(arrlist);
    @Override
    public void onCreate(Bundle bun)
    {
        super.onCreate(bun);
        setContentView(R.layout.main);
        lv=(ListView)findViewById(R.id.lv);
        lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , arr));
        }
    }
Tanmay Mandal
sumber
0

Berikut adalah contoh bagaimana Anda dapat mengimplementasikan tampilan daftar:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //We have our list view
    final ListView dynamic = findViewById(R.id.dynamic);

    //Create an array of elements
    final ArrayList<String> classes = new ArrayList<>();
    classes.add("Data Structures");
    classes.add("Assembly Language");
    classes.add("Calculus 3");
    classes.add("Switching Systems");
    classes.add("Analysis Tools");

    //Create adapter for ArrayList
    final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1, classes);

    //Insert Adapter into List
    dynamic.setAdapter(adapter);

    //set click functionality for each list item
    dynamic.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.i("User clicked ", classes.get(position));
        }
    });



}
Syed Sadman
sumber
Jika Anda menggunakan Android Studio, itu hanya akan mengisi otomatis metode onItemClick (). Sekarang yang harus Anda lakukan hanyalah menambahkan fungsionalitas ke dalamnya. Untuk kasus saya, saya baru saja mencatat setiap elemen dari daftar.
Syed Sadman