2017-02-21 77 views
1

在許多示例和教程中 - 如何使用gridView和適配器就是這樣一種情況,在我們的適配器中,我們實現了一些GridView中的項目名稱列表。Android適配器到gridView - 按鈕列表,而不是按鈕列表名稱

我們重寫Adapter中的getView方法。然後我們在gridView中膨脹我們的項目。接下來,我們更改它的文本從我們的名單文本[位置]

這裏是例子的代碼:

公共類TileAdapter延伸BaseAdapter {

private Context context; 
private Tile[] tiles; 

public TileAdapter(Context context, Tile[] tiles){ 
    this.context = context; 
    this.tiles= tiles; 
} 

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

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View gridView; 

    if(convertView == null){ 

     gridView = new View(context); 
     gridView = inflater.inflate(R.layout.layout_tile, null); 

     TextView textView = (TextView) gridView.findViewById(R.id.tile_title); 
     textView.setText(tiles[position].getTitle()); 

    }else{ 
     gridView = (View) convertView; 
    } 

    return gridView; 

} 

一切工作正常。但是如果我需要從列表中創建項目呢?

讓我們假設我們有一個地方List<Button> buttons我們有我們在其他類中使用的按鈕。 GridView適配器從「MainClass」這個列表中獲取。

如何在適配器中編碼getView()以將此列表中的按鈕設置爲項目? 因此,爲了不創建新的按鈕,並告訴新的Button的標籤與列表中的相同,但要將列表中的這些按鈕放在gridView中!

所以我需要這樣的東西?你知道這個主意嗎?

場是我的類,它伸長按鈕

@Override 

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

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if(convertView == null){ 

      view= new View(context); 
      view= inflater.inflate(R.layout.field_layout, null); 

      //This is bad - but You know what i want? 
      Field field = (Field) view.findViewById(R.id.field); 
      field = fields.get(position); 

     }else{ 
      view= (View) convertView; 
     } 

     return view; 
    } 

回答

0

沒有強迫你擡高所有的項目時getView()被調用。 相反,您可以在創建適配器並返回它們時創建/接收視圖列表。

所以這方面的一個例子是:

public class TileAdapter extends BaseAdapter { 

    List<View> views = new ArrayList<>(); 

    public void setViews(@NonNull List<View> views) { 
     this.views = views; 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return views.size(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return views.get(i); 
    } 

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

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     return views.get(i); 
    } 
} 
+0

我不明白這一點。 這是什麼意見,以及如何從列表中膨脹這些按鈕? –

+0

視圖可以像'inflater.inflate(R.layout.field_layout,null);'中那樣膨脹;'您可以在活動中誇大它們並將它們傳遞給適配器或適配器構造器。也許你應該在繼續之前閱讀此內容 - http://www.vogella.com/tutorials/AndroidCustomViews/article.html –

+0

好的,謝謝。我將從閱讀這個開始 –