Android динамически устанавливает ImageView в списке
У меня есть список со следующим макетом:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/outName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="6dip"
android:paddingLeft="6dip"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:id="@+id/outSurname"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="6dip"
android:paddingLeft="6dip"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:id="@+id/outAddress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="6dip"
android:paddingLeft="6dip"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:id="@+id/outPhone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="6dip"
android:paddingLeft="6dip"
android:textSize="17sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/outPhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Я извлекаю свои поля из BD в формате JSON с помощью Async Task и заполняю список в функции onPostExecute следующим образом:
// Updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
// Updating parsed JSON data into ListView
ListAdapter adapter = new SimpleAdapter(
MyActivity.this, MyList,
R.layout.my_layout, new String[] { “name”, “surname”, “address”, "phone" },
new int[] { R.id.outName, R.id.outSurname, R.id.outAddress, R.id.outPhone });
// Updating ListView
setListAdapter(adapter);
}
});
}
}
где MyList - это ArrayList:
ArrayList<HashMap<String, String>> MyList;
MyList = new ArrayList<HashMap<String, String>>();
Каждое поле моих результатов JSONArray состоит из "имени", "фамилии", "адреса", "телефона" и "фотографии". "photo" - это числовое поле с 4 возможными значениями ( 0, 1, 2, 3), где каждое значение относится к конкретному изображению, которое у меня есть в папке для рисования. Как я могу динамически установить изображение ImageView в зависимости от этого значения?
1 ответ
Решение
Вам нужно написать адаптер. сделать свой собственный на основе этого.
public class ListAdapter extends BaseAdapter{
Context context;
ArrayList<HashMap<String, String>> myList;
public BankAdapter(Context context,ArrayList<HashMap<String, String>> myList){
this.context = context;
this.myList=myList;
}
static class ViewHolder {
// Include Number of reqd views.
private TextView item;
private ImageView pic;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.length;
}
@Override
public Object getItem(int pos) {
// TODO Auto-generated method stub
return items[pos];
}
@Override
public long getItemId(int pos) {
// TODO Auto-generated method stub
String id = items[pos].getId();
return Long.parseLong(id);
}
@Override
public View getView(int position, View view, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder mViewHolder = null;
if(view == null){
mViewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Activity.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.listrow,parent,false);
mViewHolder.item = (TextView)view.findViewById(R.id.items_txt);
mViewHolder.pic=(ImageView)view.findViewById(R.id.pics_img)
view.setTag(mViewHolder);
}
else{
mViewHolder = (ViewHolder)view.getTag();
}
mViewHolder.item.setText(myList.get(position).getKey());
if(condition){
//update Image with correct item.
mViewHolder.pic.setDrawable(//getitemfromList);
}
return view;
}
}