2013-07-02 39 views
7

Tôi muốn hiển thị các mục Arraylist trong Gridview. ArrayList của tôi là như thế này:Cách hiển thị danh sách mảng trong chế độ xem lưới trong android

1 Hello Hello

2 Hello Hello

Nếu tôi gắn nó vào một điều khiển GridView như thế này:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, event_list); 

    gridview.setAdapter(adapter); 

event_List là ArrayList của tôi. Thông qua cách tiếp cận này, tôi nhận được một hàng Arraylist hoàn chỉnh hoặc ghi lại trong một ô của GridView. Tôi muốn hiển thị từng mục như "Hello" của Arraylist trong mỗi ô của GridView. Giống như 1 trong một ô, "Xin chào" trong ô khác và v.v.

Cảm ơn trước

+0

Tại sao không sử dụng BaseAdapter? Nó sẽ cung cấp cho bạn toàn quyền kiểm soát với chi phí nhỏ 3-4 chức năng bổ sung. Là chuỗi ArrayList của bạn hoàn thành chuỗi "1 Hello Hello"? – sandrstar

+0

Giống như là hàng = cn.getID() + "," + cn.getMessage() + "," + cn.getTime(); event_list.add (hàng); –

+0

Tôi không thể tìm ra, BaseAdapter hoạt động như thế nào? –

Trả lời

11

vẻ như bạn cần phải sử dụng BaseAdapter, bởi vì mặc định ArrayAdapter không có khả năng để thực hiện phân chia của ArrayList yếu tố vào số yếu tố.

Vì vậy, nó sẽ trông giống như sau:

public class MyActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final GridView grid = (GridView) findViewById(R.id.gridView); 
     final ArrayList<String> items = new ArrayList<String>(); 

     items.add("1 , Hello11 , Hello12"); 
     items.add("2 , Hello21 , Hello22"); 

     grid.setAdapter(new GridAdapter(items)); 
    } 

    // Assume it's known 
    private static final int ROW_ITEMS = 3; 

    private static final class GridAdapter extends BaseAdapter { 

     final ArrayList<String> mItems; 
     final int mCount; 

     /** 
     * Default constructor 
     * @param items to fill data to 
     */ 
     private GridAdapter(final ArrayList<String> items) { 

      mCount = items.size() * ROW_ITEMS; 
      mItems = new ArrayList<String>(mCount); 

      // for small size of items it's ok to do it here, sync way 
      for (String item : items) { 
       // get separate string parts, divided by , 
       final String[] parts = item.split(","); 

       // remove spaces from parts 
       for (String part : parts) { 
        part.replace(" ", ""); 
        mItems.add(part); 
       } 
      } 
     } 

     @Override 
     public int getCount() { 
      return mCount; 
     } 

     @Override 
     public Object getItem(final int position) { 
      return mItems.get(position); 
     } 

     @Override 
     public long getItemId(final int position) { 
      return position; 
     } 

     @Override 
     public View getView(final int position, final View convertView, final ViewGroup parent) { 

      View view = convertView; 

      if (view == null) { 
       view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false); 
      } 

      final TextView text = (TextView) view.findViewById(android.R.id.text1); 

      text.setText(mItems.get(position)); 

      return view; 
     } 
    } 
} 

Sẽ tạo lưới với sáu mặt hàng. Xem thêm trong tương ứng Android Guide for Grid View.

+0

Tại sao khai báo phân lớp bộ điều hợp này là 'kết quả riêng tư'? –

+1

@learnenburn không có lý do gì mà bất kỳ ai bên ngoài có thể cần truy cập vào nó, vì vậy riêng tư. Ngoài ra, lớp này không được thiết kế để thừa kế - vì vậy cuối cùng. Thông thường đó là một thực hành tốt, một phần dựa trên hiệu quả Java (không nhớ các mục chính xác từ cuốn sách). – sandrstar

2

Hoặc bạn có thể sử dụng này:

MainActivity.java:

import android.os.Bundle; 
import android.app.Activity; 
import android.support.annotation.NonNull; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.GridView; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Iterator; 
import java.util.List; 
import java.util.ListIterator; 

public class MainActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    List<String> values=new ArrayList<String>(); 
    values.add("Home");values.add("About");values.add("Contact");values.add("Help");values.add("Index"); 
    values.add("Home");values.add("About");values.add("Contact");values.add("Help");values.add("Index"); 
    GridView myGrid=(GridView)findViewById(R.id.grid); 

    myGrid.setAdapter(new ArrayAdapter<String>(this,R.layout.cell,values)); 

    } 
} 

activity_main.xml của bạn:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/mySelection" /> 
<GridView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/grid" 
    android:columnWidth="75dip" 
    android:gravity="center" 
    android:horizontalSpacing="5dip" 
    android:numColumns="auto_fit" 
    android:stretchMode="columnWidth" 
    android:verticalSpacing="75dip"> 

</GridView> 

Tạo một file xml mới trong thư mục bố trí và đặt tên là cell.xml và đặt nó vào trong đó:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp"> 

Bây giờ chạy và thưởng thức. Đây là đầu ra:

Hooray

+0

Nó có thể không phải là những gì bạn chính xác muốn. nhưng đó là câu trả lời cho tiêu đề câu hỏi của bạn. –

+0

Nó hoạt động như thế này. Nhưng tôi tự hỏi tại sao. Đâu là mảng liên kết với textview?TextView có tự động chọn chuỗi không? – maggocnx

+0

nó bị ràng buộc ở đây: [myGrid.setAdapter (new ArrayAdapter (this, R.layout.cell, values));] –

Các vấn đề liên quan