Bir ListView bir ArrayList kullanarak mı dolduruluyor?


109

Benim Androidapp doldurmak gerekiyor ListViewbir verileri kullanılarak ArrayList.

Bunu yapmakta zorlanıyorum. Lütfen birisi bana kod konusunda yardım edebilir mi?

Yanıtlar:


228

Bunu ArrayAdapter, ArrayList'inizi (veya başka herhangi bir koleksiyonu) düzeninizdeki öğelerinize (ListView, Spinner vb.) Uyarlayacak bir yöntemle yapmanız gerekir .

Android geliştirici kılavuzunun söylediği şudur :

Bir ListAdapterbir yöneten ListViewrasgele nesnelerinin bir dizisi tarafından desteklenmektedir. Varsayılan olarak bu sınıf, sağlanan kaynak kimliğinin tek bir TextView. Daha karmaşık bir düzen kullanmak istiyorsanız, bir alan kimliği de alan yapıcıları kullanın. Bu alan kimliği TextView, daha büyük düzen kaynağında a'ya başvurmalıdır.

Bununla birlikte TextView, referansta bulunulduğunda, toString()dizideki her nesnenin ile doldurulacaktır . Özel nesne listeleri veya dizileri ekleyebilirsiniz. toString()Listedeki öğe için hangi metnin görüntüleneceğini belirlemek için nesnelerinizin yöntemini geçersiz kılın .

TextViewsÖrneğin ImageViews, dizi görünümü dışında bir şey kullanmak veya toString()sonuçların yanı sıra bazı verilerin görünümleri doldurmasını sağlamak için, getView(int, View, ViewGroup)istediğiniz görünüm türünü döndürmek için geçersiz kılın .

Yani kodunuz şöyle görünmelidir:

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); 
    }
}

1
@ Amokrane Chentir: Seni anlayamadım ..... pls tam programı
yazabilir misin

1
@KanNaN: Elbette, düzenlememin sana daha açık olup olmadığını görebiliyor musun?
Amokrane Chentir

1
@ Amokrane Chentir: "setContentView" yönteminin "findViewById" den önce çağrılması gerektiğini, aksi takdirde ListView bulunmayacağını düşünüyorum.
Petru

Liste <String> tanınmıyor. neden? android stüdyosu kullanıyorum.
Ali.Rashidi


11

ArrayList kullanarak liste görünümünü doldurmak için aşağıdaki cevabı deneyin

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");   
    }
}

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));
        }
    }

0

Liste görünümünü nasıl uygulayabileceğinize dair bir örnek:

 @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));
        }
    });



}

Android Studio kullanıyorsanız, yalnızca onItemClick () yöntemini otomatik olarak doldurur. Şimdi yapmanız gereken tek şey ona işlevsellik eklemek. Benim durumum için, listenin her bir öğesini kaydettim.
Syed Sadman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.