我有一个列表视图和BaseAdapter添加一个图像和一个文本到row.My问题是如何根据文本名称在列表视图中加载图像。我知道我是否根据文本数组添加图像到数组可以做到这一点。但我的文本数组从服务调用加载。每次文本数组顺序更改然后我的图像加载顺序不正确..所以任何人都可以指出我的方法来完成这件事。谢谢你
BaseAdapter类
public class MenuListAdapter extends BaseAdapter {
private Context context;
private List<String> mtitle;
private int[] micon;
private LayoutInflater inflater;
Typeface tf;
public MenuListAdapter(Context context, List<String> modules, int[] icon) {
this.context = context;
this.mtitle = modules;
this.micon = icon;
}
@Override
public int getCount() {
return mtitle.size();
}
@Override
public Object getItem(int arg0) {
return arg0;
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int position, View arg1, ViewGroup parent) {
TextView title;
ImageView icon;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.nav_drawer_list_item, parent,
false);
title = (TextView) itemView.findViewById(R.id.title);
icon = (ImageView) itemView.findViewById(R.id.icon);
Typeface type = Typeface.createFromAsset(context.getAssets(),"fonts/font.ttf");
title.setText(mtitle.get(position));
title.setTypeface(type);
icon.setImageResource(micon[position]);
return itemView;
}
}
images array
private int[] photo;
photo = new int[]{R.drawable.btn_0011_home,R.drawable.btn_0010_accounts, R.drawable.btn_0009_contacts, R.drawable.btn_0008_opportunities,
R.drawable.btn_0007_leads,R.drawable.btn_0006_calendar,R.drawable.btn_0005_documents,R.drawable.btn_0004_emails,R.drawable.btn_0003_campaigns, R.drawable.btn_0002_calls, R.drawable.btn_0001_meeting,
R.drawable.btn_0000_tasks, R.drawable.ic_launcher}
MenuListAdapter menuAdapter = new MenuListAdapter(
getApplicationContext(), moduleName, photo);
答案 0 :(得分:1)
一般来说,您应该将图像上传到服务器,其名称与数据库中的名称相同,因此您可以根据imageLoader.setImageresource(url+textview.getText.toString()+".png",imageview,options...);
在您的情况下尝试以下步骤 1)更改类似于数据库中公司名称的可绘制名称,如R.drawable.companyname1,并保留一个字符串数组,这些名称具有相同的位置,如int array.String array = {“R.drawable.companyname1”,...等等}; 2)内部getview方法
holder.text.setTag(position);
holder.text.setText( tempValues.getCompanyName() );
if(holder.text.getText().toString().equalsIgnorecase(array[Integer.parseInt(textview.GetTag().toString())){
holder.image.setImageResource( array[Integer.parseInt(textview.GetTag().toString()));
}
答案 1 :(得分:1)
您可以使用Map<Integer, ObjectPojo>
(ObjectPojo可以包含您需要的任何属性)而不是List
。根据要求,您可以修改getItem, getCount, getView
等方法。
图片 - icon.setImageResource(map.get(integerId));
答案 2 :(得分:1)
您可以将HashMap用于此目的。我假设文本和图像数量相等。您将文本作为键和图像名称作为值。
HashMap<String, Integer> imageData = new HashMap<String, Integer>();
imageData.put("Accounts", Integer.valueOf(R.drawable.btn_0010_accounts));
构造函数将更改为:
private HashMap<String, Integer> imageData;
public MenuListAdapter(Context context, List<String> modules, HashMap<String, Integer> imageData) {
this.context = context;
this.mtitle = modules;
this.imageData = imageData;
}
在getView()
方法中,您可以将图像设为
@Override
public View getView(int position, View arg1, ViewGroup parent) {
........
String textKey = mtitle.get(position);
Integer imageResource = imageData.get(textKey);
icon.setImageResource(imageResource.intValue());
.........
}