动态添加复杂对象到gridview
Dynamically adding complex objects to the gridview
我正在学习自定义适配器,我了解原理:创建列表,填写数据,连接适配器-显示列表。如果列表由字符串组成,我想出了如何添加一个新字符串。
告诉我如何添加一个新项目(一个新图像和一个新字符串),如果我使用 GridView,由带有字符串的图像组成。
在Google中,所有例子要么不加复杂项(只有一个字符串),要么不加动态
更新:我将通过一个例子来解释我需要什么。该代码创建了一个项目列表,或者只是将项目放置在布局中,然后在 运行 程序中,用户单击其中一个对象 - 在 activity 的另一部分中,一个具有相同对象的对象创建内容(最好是在创建前可以编辑的内容)。还是我错了,需要使用布局中的结构?有很多代码很难在视觉上看到,并且与gridview、listview
相比性能有所下降
你在这里要实现的是一个listfragment,希望能帮到你:
1: 创建一个包含您的列表项的 list_item.xml
文件(例如,ImageView
和一个 TextView
),这将表示 list/grid
中的单个项目
2: 创建一个代表您的项目的模型 class
class Image{
Bitmap imageBitmap;
String title;
}
3: 将模型作为列表传递给适配器
4:在适配器中,在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;
}
}
我正在学习自定义适配器,我了解原理:创建列表,填写数据,连接适配器-显示列表。如果列表由字符串组成,我想出了如何添加一个新字符串。 告诉我如何添加一个新项目(一个新图像和一个新字符串),如果我使用 GridView,由带有字符串的图像组成。 在Google中,所有例子要么不加复杂项(只有一个字符串),要么不加动态
更新:我将通过一个例子来解释我需要什么。该代码创建了一个项目列表,或者只是将项目放置在布局中,然后在 运行 程序中,用户单击其中一个对象 - 在 activity 的另一部分中,一个具有相同对象的对象创建内容(最好是在创建前可以编辑的内容)。还是我错了,需要使用布局中的结构?有很多代码很难在视觉上看到,并且与gridview、listview
相比性能有所下降你在这里要实现的是一个listfragment,希望能帮到你:
1: 创建一个包含您的列表项的 list_item.xml
文件(例如,ImageView
和一个 TextView
),这将表示 list/grid
2: 创建一个代表您的项目的模型 class
class Image{
Bitmap imageBitmap;
String title;
}
3: 将模型作为列表传递给适配器
4:在适配器中,在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;
}
}