当用户使用自定义适配器

时间:2016-08-04 23:00:08

标签: java android gridview

我尝试创建一个自定义适配器,在运行时将一个项添加到Grid(使用GridView),以响应用户单击按钮。

添加到网格中的每个项目包含2个TextView项目和一个ImageView项目。在每个TextView项目中存储的文本由用户在单击按钮之前提供。

我找不到任何关于如何在线执行此操作的示例,所以我只看了一些示例,这些示例具有自定义网格适配器,可在应用程序启动时初始化网格,如下所示:

https://www.caveofprogramming.com/guest-posts/custom-gridview-with-imageview-and-textview-in-android.html

唯一的问题是我没有可以预编程的字符串数组,因为这些字符串是由运行时的用户输入决定的,添加到网格中的每个对象只应在单击按钮时出现,否则,屏幕应为空白。

我尝试用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;

}

1 个答案:

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