Como posso definir desenhado para um ListView no Android
Pergunta
Estou escrevendo um aplicativo para o Android 1.5. Quero usar um complexo ListView para exibir meus dados. Quero mostrar uma visão de imagem de um objeto desenhado no meu item de lista.
Eu aprendi com uma demonstração:
------> listData.put("Img", listData.put("Img", R.drawable.XXX));
listData.put("Time", "100");
listItems.add(listData);
Ele pode ser exibido corretamente, no entanto, eu quero alterar o IMG em tempo de execução, a imagem talvez gerada em tempo de execução, então eu altero o código da seguinte forma, mas ela cai. Alguém pode me ajudar ? Muito Obrigado!
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.item_list);
itemListView = (ListView) findViewById(R.id.listview);
ArrayList<HashMap<String, Object>> listItems = new ArrayList<HashMap<String, Object>>();
for(int i = 0;i <XXX.size(); ++i) {
HashMap<String, Object> listData = new HashMap<String, Object>();
--------->/*1)*/ listData.put("Img", new Drawable(XXX));
/*2)*/ listData.put("Time", "100");
/*3)*/ listItems.add(listData);
}
SimpleAdapter listItemAdapter = new SimpleAdapter(this, listItems, R.layout.listitem, new String[] { "Img", "Time"}, new int[] { R.id.listitem_img, R.id.listitem_time });
itemListView.setAdapter(listItemAdapter);
}
listItem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:paddingBottom="4dip"
android:paddingLeft="12dip"
android:paddingRight="12dip">
<ImageView
android:id="@+id/listitem_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="12dip"/>
<TextView
android:id="@+id/listitem_time"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textSize="20dip" />
</LinearLayout>
Solução
Experimente este, ele me ajudou.
public class AndroidList extends ListActivity {
public class MyCustomAdapter extends ArrayAdapter<String> {
public MyCustomAdapter(Context context, int textViewResourceId,
String[] objects) {
super(context, textViewResourceId, objects);
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
//return super.getView(position, convertView, parent);
View row = convertView;
if(row==null){
LayoutInflater inflater=getLayoutInflater();
row=inflater.inflate(R.layout.row, parent, false);
}
TextView label=(TextView)row.findViewById(R.id.weekofday);
label.setText(month[position]);
ImageView icon=(ImageView)row.findViewById(R.id.icon);
if (month[position]=="December"){
icon.setImageResource(R.drawable.icon);
}
else{
icon.setImageResource(R.drawable.icongray);
}
return row;
}
}
String[] month = {
"January", "February", "March", "April",
"May", "June", "July", "August",
"September", "October", "November", "December"
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
/*setListAdapter(new ArrayAdapter<String>(this,
R.layout.row, R.id.weekofday, DayOfWeek));*/
setListAdapter(new MyCustomAdapter(AndroidList.this, R.layout.row, month));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
//super.onListItemClick(l, v, position, id);
String selection = l.getItemAtPosition(position).toString();
Toast.makeText(this, selection, Toast.LENGTH_LONG).show();
}
}
Encontrado aqui: http://android-er.blogspot.com/2010/06/using-convertview-in-getview-to-make.html
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow