动态更改Listview / ArrayAdapter的图像

时间:2013-09-11 07:05:59

标签: java android android-listview android-imageview android-arrayadapter

我有一个ListView用于在我的应用程序中显示文件/文件夹层次结构。我正在使用包含ImageViewTextView的自定义布局。我想根据ImageView文本更改TextView的图像是ether文件夹或文件。我是否可以在不使用自定义ArrayAdapter的情况下执行此操作,或者如果必须使用自定义ArrayAdapter,如何在运行时更改ImageView图标。?

5 个答案:

答案 0 :(得分:0)

如果列表中的每个条目需要多个变量项,则必须使用自定义适配器(例如,在您的情况下,您有两个,ImageViewTextView。通过调用ArrayAdapter.notifyDataSetChanged()可以最轻松地在运行时更改数据。

答案 1 :(得分:0)

答案 2 :(得分:0)

您可以在自定义适配器的getView功能中检查,并根据textview设置imageview。 有关自定义数组适配器,请参阅this example

答案 3 :(得分:0)

您可以使用ImageView.setImageResource(int)方法。

答案 4 :(得分:0)

在自定义适配器类中使用此getView()方法。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View newRowView = convertView;
    ViewHolder viewHolder;


    if(newRowView == null)
    {
    LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    newRowView = inflator.inflate(R.layout.my_list, parent,false); 
    viewHolder = new ViewHolder();

    viewHolder.name = (TextView) newRowView.findViewById(R.id.textInList);

    viewHolder.image = (ImageView) newRowView.findViewById(R.id.iconInList);

    newRowView.setTag(viewHolder);

    }
    else
    {
        viewHolder = (ViewHolder) newRowView.getTag();

    }


    viewHolder.image.setImageDrawable(textImages[position]);

    viewHolder.name.setText(names[position]);

    return newRowView; 
}



static class ViewHolder
{
    TextView name;
    ImageView image;

}

此处textImages& names是我从活动类传递给自定义适配器的数组。

这是内存效率最高,速度最快的方式。