我有自定义数组列表,它连接到我的数组列表的每一行的适配器和自定义XML。当点击项目时,我已经让字符串生成器警报,当我确认它时,我想更改自定义数组列表中显示的图像。到目前为止,我还没有能够以某种方式更新列表与选定项目的新图像。你知道吗,它是如何完成的?有什么方法可以跟踪,列表中的哪个位置被点击?恢复方法和某种“重绘”最佳解决方案?Android自定义阵列列表图像更新
感谢
编辑:增加了对适配器代码我使用:
public class datamanagerAdapter extends ArrayAdapter<mapObject>{
private ArrayList<mapObject> items;
private Context ctx;
String rememberName="";
public datamanagerAdapter(Context context, int textViewResourceId, ArrayList<mapObject> items) {
super(context, textViewResourceId, items);
this.items = items;
this.ctx = context;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
final mapObject mo = items.get(position);
if (mo != null) {
ImageView imv = (ImageView) v.findViewById(R.id.selected);
TextView one = (TextView) v.findViewById(R.id.mapname);
TextView two = (TextView) v.findViewById(R.id.map_contains);
TextView three = (TextView) v.findViewById(R.id.map_size);
if (one != null) {
one.setText(""+mo.getMapName());
}
if(two != null){
two.setText(""+ mo.getMapContains());
}
if(three != null){
three.setText("Size: "+ mo.getMapSize()+"MB POI: "+mo.getMapContainsPoi()+"");
}
if (imv != null) {
imv.setImageDrawable(mo.getImage());
}else{
imv.setImageDrawable(v.getResources().getDrawable(R.drawable.cross));
}
v.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
showDetails(mo, ctx);
}
private void showDetails(final mapObject mo, final Context ctx) {
final Context mContext = ctx.getApplicationContext();
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Service.LAYOUT_INFLATER_SERVICE);
final View layout = inflater.inflate(R.layout.custom_dialog,null);
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setView(layout);
final AlertDialog alertDialog = builder.create();
TextView l1=(TextView) layout.findViewById(R.id.lineone);
TextView l2=(TextView) layout.findViewById(R.id.linetwo);
TextView l3=(TextView) layout.findViewById(R.id.linethree);
TextView l4=(TextView) layout.findViewById(R.id.linefour);
TextView l5=(TextView) layout.findViewById(R.id.linefive);
TextView l6=(TextView) layout.findViewById(R.id.linesix);
TextView l7=(TextView) layout.findViewById(R.id.lineseven);
Button select=(Button) layout.findViewById(R.id.selectActiveMap);
Button cancel=(Button) layout.findViewById(R.id.closeWindowButton);
rememberName=mo.getMapName();
l1.setText("...");
l2.setText("Map: "+mo.getMapName());
l3.setText("Covered Area: "+mo.getMapContains());
l4.setText("Size: "+mo.getMapSize()+" MB");
l5.setText("POI: "+mo.getMapContainsPoi());
l6.setText("Source: "+mo.getMapSource());
l7.setText("Version: "+mo.getMapVersion());
select.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//here I want to change image which is displayed in the list. If I select this map, I ant to have displayed "tick" better than a "cross" which is used by default.
}
alertDialog.dismiss();
}
});
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
}
});
alertDialog.show();
}
});
}
return v;
}
}
发表您的适配器的代码。 – Luksprog 2012-03-10 17:50:16
添加适配器代码 – Waypoint 2012-03-11 06:48:55