【问题标题】:Dynamically adding complex objects to the gridview [closed]将复杂对象动态添加到gridview [关闭]
【发布时间】:2018-05-15 15:38:26
【问题描述】:

我在学习自定义适配器,我明白了原理:创建列表,填写数据,连接适配器-列表显示。如果列表由字符串组成,我想出了如何添加新字符串。 告诉我如何添加一个新项目(一个新图像和一个新字符串),如果我使用 GridView,由带有字符串的图像组成。 在 Google 中,所有示例要么不添加复杂项(仅一个字符串),要么不动态添加

upd:我将通过一个例子来解释我需要什么。代码创建一个项目列表或简单地将项目放置在布局中,然后在运行的程序中,用户单击其中一个对象 - 在活动的另一部分中,创建具有相同内容的对象(最好具有可以在创建之前进行编辑)。还是我错了,需要使用布局中的构造?有很多代码在视觉上很困难,并且与gridview、listview相比会降低性能

【问题讨论】:

  • 听起来您需要一个表示每个数据条目(图像+字符串值)的视图(XML)。
  • github.com/google/iosched/blob/master/third_party/… 看看 google iosched 应用程序,这是一个同时具有文本和图像的适配器的好例子。
  • 我解释了原来的问题

标签: android arrays gridview add dynamically-generated


【解决方案1】:

你在这里尝试实现的是一个列表片段,我希望我能在这里提供帮助:

1:创建一个包含您的列表项的list_item.xml 文件(例如,ImageView 和一个TextView),这将表示列表/网格中的单个项目

2:创建一个代表您的项目的模型类

class Image{
   Bitmap imageBitmap;
   String title;
}

3:将模型作为列表传递给适配器

4:在Adapter中,在getView()方法中:

  • 膨胀list_item.xml
  • findViewById() 对于您在 list_item.xml 中的每个视图 像这样:
    (TextView) View.findViewById(android.R.id.textView)) .setText(getItem(position);
  • getItem(position) 部分将使用您传递给模型的列表中的数据填充视图

适配器的最终外观如下:

public class MyAdapter extends BaseAdapter {
    List<Image> images =new ArrayList<>();
    Context c;

    //constructor
    public MyAdapter(List<Image> images, Context c) {
        this.images.addAll(images);
        this.c = c;
    }


    @Override
    public Object getItem(int i) {
        return images.get(i);
    }

    @Override
      public View getView(int position, View convertView, ViewGroup container) {
          if (convertView == null) {
              convertView = getLayoutInflater().inflate(R.layout.list_item, container, false);
          }

          ((TextView) convertView.findViewById(android.R.id.textView))
                  .setText(getItem(position).getTitle());

          ((ImageView) convertView.findViewById(android.R.id.imageView))
                  .setImageBitmap(getItem(position).getImageBitmap());

          return convertView;
      }

}

【讨论】:

  • 如果我正确理解了您的答案 - 它只是从预先创建的列表中动态添加对象结构。更准确地说,预先记录的数据到新列表的传输没有改变。例如:在代码中创建了线条/图像列表,然后在运行的应用程序中将该列表传输到 listview。
  • 抱歉,在我们开始长时间的对话以相互了解之前,我建议您对 ListView它的工作方式进行更多研究 b> 我知道第一次使用 ListView 可能很困难,但最终你会明白的。互联网上有很多示例和文档。我写的适配器也是一个非常基本的例子,祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 2013-04-22
  • 2011-01-05
  • 1970-01-01
相关资源
最近更新 更多