Android适配器到gridView - 按钮列表而不是按钮的列表名称

时间:2017-02-21 19:04:06

标签: android gridview android-adapter baseadapter

在许多示例和教程中 - 如何使用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;
    }

1 个答案:

答案 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);
    }
}