Android 向gridview动态添加复杂对象
我正在学习自定义适配器,我了解其原理:创建列表,填写数据,连接适配器-显示列表。我知道如果列表由字符串组成,如何添加新字符串。 如果我使用由带字符串的图像组成的GridView,请告诉我如何添加新项目(一个新图像和一个新字符串)。 在Google中,所有示例要么不添加复杂项(只有一个字符串),要么不动态添加Android 向gridview动态添加复杂对象,android,arrays,gridview,add,dynamically-generated,Android,Arrays,Gridview,Add,Dynamically Generated,我正在学习自定义适配器,我了解其原理:创建列表,填写数据,连接适配器-显示列表。我知道如果列表由字符串组成,如何添加新字符串。 如果我使用由带字符串的图像组成的GridView,请告诉我如何添加新项目(一个新图像和一个新字符串)。 在Google中,所有示例要么不添加复杂项(只有一个字符串),要么不动态添加 upd:我会举例说明我需要什么。代码创建一个项目列表,或者简单地将项目放置在布局中,然后在运行的程序中,用户单击其中一个对象,并在活动的另一部分中创建具有相同内容的对象(最好使用创建前可以编
upd:我会举例说明我需要什么。代码创建一个项目列表,或者简单地将项目放置在布局中,然后在运行的程序中,用户单击其中一个对象,并在活动的另一部分中创建具有相同内容的对象(最好使用创建前可以编辑的内容)。还是我错了,需要使用布局中的结构?与gridview相比,代码在视觉上很困难,性能也会降低,listview您试图在这里实现的是一个listfragment,我希望我能在这里提供帮助: 1:创建一个包含列表项的
list\u item.xml
文件(例如,ImageView
和TextView
),这将表示列表/网格中的单个项
2:创建一个表示项目的模型类
class Image{
Bitmap imageBitmap;
String title;
}
3:将模型作为列表传递给适配器
4:在适配器中的getView()方法中:
- 将
list\u item.xml充气
findViewById()
用于列表中的每个视图\u item.xml
像这样:(TextView)View.findViewById(android.R.id.TextView))
.setText(getItem(位置);
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;
}
}
公共类MyAdapter扩展了BaseAdapter{
列表图像=新的ArrayList();
上下文c;
//建造师
公共MyAdapter(列表图像,上下文c){
this.images.addAll(images);
这个.c=c;
}
@凌驾
公共对象getItem(int i){
返回图像。获取(i);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组容器){
if(convertView==null){
convertView=GetLayoutFlater()。充气(R.layout.list_项,容器,false);
}
((TextView)convertView.findViewById(android.R.id.TextView))
.setText(getItem(position).getTitle());
((ImageView)convertView.findViewById(android.R.id.ImageView))
.setImageBitmap(getItem(position).getImageBitmap());
返回视图;
}
}
听起来您需要一个表示每个数据项(图像+字符串值)的视图(XML)。看看google iosched应用程序,它是一个既有文本又有图像的适配器的好例子。如果我正确理解了你的答案,我解释了最初的问题-这只是从预先创建的列表中动态添加对象结构。更准确地说,预录数据到新列表的传输是不变的。例如le:在代码中创建了行/图像列表,然后在运行的应用程序中,该列表被传输到listview。抱歉,在我们开始长时间的对话以了解彼此之前,我建议您对listview
及其工作方式进行更多的研究。我知道第一次使用listview可能会很困难,但是你会明白的。互联网上有很多例子和文档。我写的适配器也是一个非常基本的例子,祝你好运。