Android 在自定义listview中动态设置图像
有人能解释一下我做错了什么/我必须做什么吗 我有一个从json数组获取信息的listview。但它是一个自定义的列表视图,每行有5个图像和一些文本。每个图像都有一个/drawable/image_选择器,根据启用/禁用的不同,该选择器具有不同的图像。我能够使用hashmap和ListAdapter动态设置每一行的文本。但我正试图对图像做同样的处理,但我无法做到这一点。使用自定义适配器是正确的选择吗?如果是这样,怎么办?从这些例子中我不明白如何使用它们 谢谢 以下是给定活动的代码: 公共类DisponiveActivity扩展了ListActivity{ ; //para os icones做布局Android 在自定义listview中动态设置图像,android,android-listview,android-adapter,Android,Android Listview,Android Adapter,有人能解释一下我做错了什么/我必须做什么吗 我有一个从json数组获取信息的listview。但它是一个自定义的列表视图,每行有5个图像和一些文本。每个图像都有一个/drawable/image_选择器,根据启用/禁用的不同,该选择器具有不同的图像。我能够使用hashmap和ListAdapter动态设置每一行的文本。但我正试图对图像做同样的处理,但我无法做到这一点。使用自定义适配器是正确的选择吗?如果是这样,怎么办?从这些例子中我不明白如何使用它们 谢谢 以下是给定活动的代码: 公共类Disp
private ProgressDialog pDialog;
//Object of class JSON Parser
JSONParser jsonParser = new JSONParser();
ArrayList<HashMap<String, String>> disponiveislist;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
disponiveislist = new ArrayList<HashMap<String, String>>();
new Loaddisp().execute();
}
//Background ASYNC task to load
class Loaddisp extends AsyncTask<String, String, String>{
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(DisponiveisActivity.this);
pDialog.setMessage("Carregando");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected String doInBackground(String... args) {
String nome = l.getString("NOME");
String preco = l.getString("PRECO");
String cfotografia = l.getString("COMFOTOGRAFIA");
String cdados = l.getString("COMDADOS");
String copiniao = l.getString("COMOPINIAO");
String cdeslocacao = l.getString("COMDESLOCACAO");
String distancia = l.getString("DISTANCIA");
//create new HASHMAP
HashMap<String,String> map = new HashMap<String,String>();
map.put("NOME", nome);
map.put("PRECO", preco);
map.put("DISTANCIA", distancia);
map.put("COMOPINIAO", copiniao);
map.put("COMDADOS", cdados);
map.put("COMFOTOGRAFIA", cfotografia);
//------------------------------
disponiveislist.add(map);
}
@Override
protected void onPostExecute(String file_url) {
// TODO Auto-generated method stub
pDialog.dismiss();
runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed JSON data into ListView
* */
Log.d("PP",disponiveislist.toString());
ListAdapter adapter = new SimpleAdapter(DisponiveisActivity.this, disponiveislist, R.layout.listrow,new String[]{"NOME","PRECO","DISTANCIA"}, new int[]{R.id.mission_name, R.id.preco, R.id.cdistancia});
setListAdapter(adapter);
}
});
}
}
private ProgressDialog pDialog;
//类JSON解析器的对象
JSONParser JSONParser=新的JSONParser();
ArrayList DisponiveList;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
disponiveislist=新的ArrayList();
新建Loaddisp().execute();
}
//要加载的后台异步任务
类Loaddisp扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=newprogressdialog(DisponiveisActivity.this);
pDialog.setMessage(“Carregando”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(假);
pDialog.show();
}
受保护的字符串doInBackground(字符串…args){
字符串nome=l.getString(“nome”);
String preco=l.getString(“preco”);
字符串cfotografia=l.getString(“COMFOTOGRAFIA”);
字符串cdados=l.getString(“COMDADOS”);
字符串copiniao=l.getString(“COMOPINIAO”);
字符串cdeslocacao=l.getString(“COMDESLOCACAO”);
字符串距离=l.getString(“距离”);
//创建新的HASHMAP
HashMap=newHashMap();
地图放置(“NOME”,NOME);
地图放置(“PRECO”,PRECO);
地图放置(“距离”,distancea);
地图放置(“科莫皮尼奥”,科皮尼奥);
地图放置(“COMDADOS”,cdados);
地图放置(“COMFOTOGRAFIA”,cfotografia);
//------------------------------
添加(地图);
}
@凌驾
受保护的void onPostExecute(字符串文件\u url){
//TODO自动生成的方法存根
pDialog.disclose();
runOnUiThread(新的Runnable(){
公开募捐{
/**
*将解析的JSON数据更新到ListView中
* */
Log.d(“PP”,disponiveislist.toString());
ListAdapter=new SimpleAdapter(DisponiveisActivity.this,disponiveislist,R.layout.listrow,新字符串[]{“NOME”,“PRECO”,“distance”},新int[]{R.id.mission_name,R.id.PRECO,R.id.cdistancia});
setListAdapter(适配器);
}
});
}
}
}我刚刚在谷歌上找到了一个很好的例子: 在这种情况下,您只有一个图像,我真的希望您能够理解如何为一行5张图片复制代码
public class ItemsList extends ListActivity {
private ItemsAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.items_list);
this.adapter = new ItemsAdapter(this, R.layout.items_list_item, ItemManager.getLoadedItems());
setListAdapter(this.adapter);
}
private class ItemsAdapter extends ArrayAdapter<Item> {
private Item[] items;
public ItemsAdapter(Context context, int textViewResourceId, Item[] items) {
super(context, textViewResourceId, items);
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.items_list_item, null);
}
Item it = items[position];
if (it != null) {
ImageView iv = (ImageView) v.findViewById(R.id.list_item_image);
if (iv != null) {
iv.setImageDrawable(it.getImage());
}
}
return v;
}
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
this.adapter.getItem(position).click(this.getApplicationContext());
}
}
public类ItemsList扩展了ListActivity{
私有项适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.items\u列表);
this.adapter=newitemsadapter(this,R.layout.items\u list\u item,itemmager.getLoadedItems());
setListAdapter(this.adapter);
}
私有类ItemsAdapter扩展了ArrayAdapter{
私人物品[]项;
公共项适配器(上下文上下文,int textViewResourceId,项[]项){
super(上下文、textViewResourceId、项);
这个项目=项目;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
如果(v==null){
LayoutInflater vi=(LayoutInflater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
v=vi.充气(R.布局.项目\列表\项目,空);
}
项目it=项目[位置];
如果(it!=null){
ImageView iv=(ImageView)v.findViewById(R.id.list\u item\u image);
如果(iv!=null){
iv.setImageDrawable(it.getImage());
}
}
返回v;
}
}
@凌驾
受保护的void onListItemClick(列表视图l、视图v、整数位置、长id){
this.adapter.getItem(位置)。单击(this.getApplicationContext());
}
}
您可能应该发布您的代码,这样我们就可以看到是否有错误了。只需使用我的代码片段进行编辑OK,那么使用项目位置和设置图像可绘制的for循环就足够了?当然可以,或者iv1.setImageDrawable(it.getImage1());iv2.setImageDrawable(it.getImage2());iv3.setImageDrawable(it.getImage3());iv4.setImageDrawable(it.getImage4());iv5.setImageDrawable(it.getImage5());