Tạo ListView bằng ArrayList?


109

AndroidỨng dụng của tôi cần điền ListViewdữ liệu từ một ArrayList.

Tôi gặp khó khăn khi làm điều này. Ai đó có thể vui lòng giúp tôi với mã không?

Câu trả lời:


228

Bạn cần làm điều đó thông qua một ArrayAdaptercái mà sẽ điều chỉnh ArrayList của bạn (hoặc bất kỳ bộ sưu tập nào khác) với các mục trong bố cục của bạn (ListView, Spinner, v.v.).

Đây là những gì hướng dẫn dành cho nhà phát triển Android nói:

A ListAdapterquản lý một được ListViewhỗ trợ bởi một mảng các đối tượng tùy ý. Theo mặc định, lớp này mong đợi rằng id tài nguyên được cung cấp tham chiếu một tài nguyên duy nhất TextView. Nếu bạn muốn sử dụng một bố cục phức tạp hơn, hãy sử dụng các hàm tạo cũng lấy id trường. Id trường đó sẽ tham chiếu đến a TextViewtrong tài nguyên bố cục lớn hơn.

Tuy nhiên, TextViewđược tham chiếu đến, nó sẽ được lấp đầy bởi toString()từng đối tượng trong mảng. Bạn có thể thêm danh sách hoặc mảng các đối tượng tùy chỉnh. Ghi đè toString()phương thức của các đối tượng của bạn để xác định văn bản nào sẽ được hiển thị cho mục trong danh sách.

TextViewsVí dụ: để sử dụng thứ gì đó khác với hiển thị mảng ImageViewshoặc để có một số dữ liệu bên cạnh toString()kết quả lấp đầy các dạng xem, hãy ghi đè getView(int, View, ViewGroup)để trả về kiểu dạng xem bạn muốn.

Vì vậy, mã của bạn sẽ giống như sau:

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: Tôi không thể hiểu được ..... bạn có thể nhập chương trình đầy đủ được không .... cảm ơn
kAnNaN 22/02/11

1
@KanNaN: Chắc chắn rồi, bạn có thể xem bản chỉnh sửa của tôi có rõ ràng hơn với bạn không?
Amokrane Chentir

1
@ Amokrane Chentir: Tôi nghĩ rằng phương thức "setContentView" phải được gọi trước "findViewById", nếu không sẽ không tìm thấy ListView.
Petru

Danh sách <Chuỗi> không được nhận dạng. tại sao? tôi đang sử dụng studio android.
Ali.Rashidi


11

Hãy thử câu trả lời dưới đây để điền danh sách xem bằng 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");   
    }
}

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

Dưới đây là một ví dụ về cách bạn có thể triển khai chế độ xem danh sách:

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



}

Nếu bạn đang sử dụng Android Studio, nó sẽ chỉ tự động điền phương thức onItemClick (). Bây giờ tất cả những gì bạn phải làm chỉ là thêm chức năng cho nó. Đối với trường hợp của tôi, tôi chỉ ghi lại từng phần tử của danh sách.
Syed Sadman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.