【发布时间】:2017-02-21 19:04:05
【问题描述】:
在许多示例和教程中 - 如何使用 gridView 和适配器是这样的,在我们的适配器中,我们实现了一些列表,例如 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 Adapter 从“MainClass”这个列表中获取。
如何在适配器中编码getView() 以将此列表中的按钮设置为项目?
所以不要创建新按钮,并告诉新按钮的标签与列表中的标签相同,而是将列表中的这个按钮完全放入gridView!
所以我需要这样的东西吗?你知道这个想法吗?
Field 是我扩展 Button 的类
@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;
}
【问题讨论】:
标签: android gridview android-adapter baseadapter