如何根据文本名称在列表视图中加载图像

时间:2015-03-31 05:34:35

标签: android arrays

我有一个列表视图和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);

3 个答案:

答案 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());
  .........
}