我尝试创建一个自定义适配器,在运行时将一个项添加到Grid(使用GridView),以响应用户单击按钮。
添加到网格中的每个项目包含2个TextView项目和一个ImageView项目。在每个TextView项目中存储的文本由用户在单击按钮之前提供。
我找不到任何关于如何在线执行此操作的示例,所以我只看了一些示例,这些示例具有自定义网格适配器,可在应用程序启动时初始化网格,如下所示:
唯一的问题是我没有可以预编程的字符串数组,因为这些字符串是由运行时的用户输入决定的,添加到网格中的每个对象只应在单击按钮时出现,否则,屏幕应为空白。
我尝试用ArrayList替换字符串数组,并添加一个可以在单击按钮后调用的方法,该方法将一个String添加到ArrayList,然后调用notifyDataSetChanged();可悲的是,它似乎没有用。请参阅以下适用的代码段:
private List<String> list = new ArrayList<>();
public void addString(String s) {
list.add(s);
this.notifyDataSetChanged();
}
public View getView(int position, View convertView, ViewGroup parent) {
Viewt view;
LayoutInflater inflater = (LayoutInflater) mContext.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.l, parent, false);
view = new Viewt();
view.tview = (TextView) convertView.findViewById(R.id.textView);
convertView.setTag (view);
} else {
view = (Viewt) convertView.getTag();
}
view.tview.setText(list.get(position));
return convertView;
}
public static class Viewt {
TextView tviewone;
}
答案 0 :(得分:0)
您没有在适配器中执行convertView.setTag(view),而是尝试从适配器中的convertView.getTag()获取视图。
if (convertView == null) {
convertView = inflater.inflate(R.layout.l, parent, false);
view = new Viewt();
view.tview = (TextView) convertView.findViewById(R.id.textView);
// add below line in adapter.
convertView.setTag (view);
} else {
view = (Viewt) convertView.getTag();
}
view.tview.setText(list.get(position));
return convertView;
}