2017-02-21 73 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

好的,谢谢。我将从阅读这个开始 –