在许多示例和教程中 - 如何使用gridView和适配器就是在我们的适配器中我们实现了一些列表,例如gridView中的项目名称。
我们在Adapter中覆盖方法getView。然后我们在gridView中为我们的项目充气。接下来,我们将列表中的文本更改为文本[position]
以下是代码示例:
public class 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()
进行编码,以便将此列表中的按钮设置为项目?
所以不要创建新的按钮,并告诉新Button的标签与列表中的相同,而是从列表中放入gridView exatcly这个按钮!
所以我需要这样的东西?你知道这个主意吗?
字段是我的类,它扩展了按钮
@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 :(得分: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);
}
}