SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, R.layout.listitem, new String[] { "image", "title", "kind", "info", "price" }, new int[] { R.id.item_image, R.id.title, R.id.kind, R.id.info, R.id.price }); simpleAdapter.setViewBinder(new SimpleAdapter.ViewBinder() { @Override public boolean setViewValue(View view, Object data, String textRepresentation) { if(view instanceof ImageView && data instanceof Bitmap){ ImageView iv = (ImageView)view; iv.setImageBitmap( (Bitmap)data ); return true; }else{ return false; } } }); listView.setAdapter(simpleAdapter); }
时间: 2023-06-18 13:08:53 浏览: 125
这段代码是一个使用 SimpleAdapter 的 ListView 的初始化和设置过程。其中,SimpleAdapter 是一个适配器,用于将数据与布局进行绑定。data 是数据源,R.layout.listitem 是布局文件,new String[] { "image", "title", "kind", "info", "price" } 是数据源中的字段名,new int[] { R.id.item_image, R.id.title, R.id.kind, R.id.info, R.id.price } 是对应的布局文件中的控件 id。
接下来,通过 setViewBinder 方法,设置一个 ViewBinder 对象,用于将数据绑定到 ImageView 控件上。在 setViewValue 方法中,判断当前 View 是否是 ImageView,并且数据是否是 Bitmap 类型,如果是,则将 Bitmap 数据设置到 ImageView 上,返回 true,表示已经完成绑定;否则返回 false,表示不进行绑定操作。
最后,将适配器设置到 ListView 中,完成布局与数据的绑定。
相关问题
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_xiaomu_note1); //创建一个List集合,List集合的元素是map List<Map<String,Object>> listItems = new ArrayList<Map<String,Object>>(); for (int i = 0;i<names.length;i++){ Map<String,Object> listItem = new HashMap<String,Object>(); listItem.put("header",imageIds[i]); listItem.put("personName",names[i]); listItem.put("desc",descs[i]); listItems.add(listItem); } //创建一个SimpleAdapter SimpleAdapter simpleAdapter = new SimpleAdapter(this,listItems,R.layout.simple_item1, new String[]{"personName","header","desc"}, new int[] {R.id.name,R.id.header,R.id.desc}); ListView list = (ListView) findViewById(R.id.mylist); //为ListView设置Adapter list.setAdapter(simpleAdapter);
这段代码是一个 Android Activity 的 onCreate 方法,主要功能是创建一个包含列表项的 ListView,并将数据绑定到 ListView 上。具体来说,代码中定义了一个 List 集合 `listItems`,用于存储每个列表项的数据,每个列表项都是一个 Map 对象,其中包括三个键值对:`header`、`personName` 和 `desc`,分别对应列表项中的图片、名称和描述。然后通过一个 for 循环,将每个列表项的数据添加到 `listItems` 集合中。接着,使用 SimpleAdapter 对象将 `listItems` 集合中的数据绑定到 ListView 中的每个列表项上,SimpleAdapter 的构造函数中指定了使用哪个布局文件来显示每个列表项的内容,并指定了每个列表项中各个控件对应的数据来源。最后,将 SimpleAdapter 对象设置为 ListView 的适配器,以便 ListView 能够正确地显示列表项的数据。
package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { ImageView imageView; TextView textView; ListView listView; String name[]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView=findViewById(R.id.listview); name=new String[]{"我","人","他","怕"}; List<Map<String,Object>> mapList=new ArrayList<Map<String,Object>>(); for(int i=1;i<5;i++){ Map<String,Object> listitem=new HashMap<String,Object>(); listitem.put("name",name[i]); listitem.put("image",R.drawable.blue); mapList.add(1,listitem); } SimpleAdapter adapter=new SimpleAdapter(this,mapList,R.layout.item,new String[]{"name","image"},new int[]{R.id.textView,R.id.imageView}); listView.setAdapter(adapter); } }为什么错
这段代码存在以下问题:
1. `for` 循环的初始值应该是 0,而不是 1。因为数组的下标从 0 开始,如果从 1 开始循环,就会漏掉第一个元素。
2. `mapList.add(1, listitem)` 的使用是有问题的。在添加元素时,不应该指定位置参数,因为这样会导致元素位置错乱。正确的方法是使用 `mapList.add(listitem)`,将元素添加到列表的末尾。
正确的代码应该是这样的:
```java
public class MainActivity extends AppCompatActivity {
ImageView imageView;
TextView textView;
ListView listView;
String name[];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listview);
name = new String[]{"我", "人", "他", "怕"};
List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
for (int i = 0; i < 4; i++) {
Map<String, Object> listitem = new HashMap<String, Object>();
listitem.put("name", name[i]);
listitem.put("image", R.drawable.blue);
mapList.add(listitem);
}
SimpleAdapter adapter = new SimpleAdapter(
this,
mapList,
R.layout.item,
new String[]{"name", "image"},
new int[]{R.id.textView, R.id.imageView}
);
listView.setAdapter(adapter);
}
}
```
这样就能正确地显示列表了。
阅读全文