簡體   English   中英

使用 ArrayList 填充 ListView?

[英]Populating a ListView using an ArrayList?

我的Android應用程序需要使用ArrayList中的數據填充ListView

我很難做到這一點。 有人可以幫我寫代碼嗎?

您需要通過ArrayAdapter來完成,它將使您的 ArrayList(或任何其他集合)適應您布局中的項目(ListView、Spinner 等)。

這就是Android 開發者指南所說的:

管理由任意對象數組支持的ListViewListAdapter 默認情況下,此類期望提供的資源 id 引用單個TextView 如果您想使用更復雜的布局,請使用也采用字段 id 的構造函數。 該字段 id 應引用較大布局資源中的TextView

然而, TextView被引用,它將被數組中每個對象的toString()填充。 您可以添加自定義對象的列表或數組。 覆蓋對象的toString()方法以確定將為列表中的項目顯示哪些文本。

要使用TextViews以外的東西來顯示數組,例如ImageViews ,或者要讓toString()結果之外的一些數據填充視圖,請覆蓋getView(int, View, ViewGroup)以返回所需的視圖類型。

所以你的代碼應該是這樣的:

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

教程

還要查找ArrayAdapter接口:

ArrayAdapter(Context context, int textViewResourceId, List<T> objects)

嘗試以下答案以使用 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");   
    }
}
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));
        }
    }

這是一個如何實現列表視圖的示例:

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



}

首先我創建了對象

ListView listview;
ArrayAdapter arrayAdapter;
ArrayList<Albums> listAlbums;

然后在 On Create 方法上:

listview = findViewById(R.id.listviewAlbum);
listAlbums = new ArrayList<Albums>();
arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, 
listAlbums);
listview.setAdapter(arrayAdapter);

然后,如果您使用 API,您可以使用此代碼來通過數據集:

for (Albums albumaux : response.body()) {
       listAlbums.add(albumaux);
            }
       arrayAdapter.notifyDataSetChanged();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM