[英]Android ListView only last row on button click
我有以下代碼:
static class ViewHolder {
TextView camera;
TextView players;
TextView max_players;
ImageView privata;
Button Buton;
}
ViewHolder holder;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
String variabile[] = getItem(position).split("\\s+");
if(convertView == null)
{
LayoutInflater linflater = LayoutInflater.from(getContext());
convertView = linflater.inflate(R.layout.custom_row, parent, false);
holder = new ViewHolder();
holder.camera = (TextView) convertView.findViewById(R.id.Nume);
holder.players = (TextView) convertView.findViewById(R.id.players);
holder.max_players = (TextView) convertView.findViewById(R.id.max_players);
holder.privata = (ImageView) convertView.findViewById(R.id.privata);
holder.Buton = (Button) convertView.findViewById(R.id.Buton);
holder.camera.setText(variabile[0]);
if (!variabile[1].equals("true")) {
parola = false;
holder.privata.setVisibility(View.INVISIBLE);
}
holder.players.setText(variabile[2]);
holder.max_players.setText(variabile[3]);
room_id = variabile[4];
nume = variabile[5];
holder.Buton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
hash = new HashMap<String, String>();
hash.put("name", nume);
hash.put("room", room_id);
if (intra) {
holder.Buton.setText("Iesi");
site = siteul + "/join";
intra = false;
} else {
holder.Buton.setText("Intra");
site = siteul + "/leave";
intra = true;
}
new ATask().execute(site);
}
});
convertView.setTag(holder);
}
else
holder = (ViewHolder) convertView.getTag();
return convertView;
}
我正在嘗試從PostExecute上的AsyncTask訪問一行,並像這樣修改它:
TextView players_mare = holder.players;
players_mare.setText(rez.substring(2));
無論按下的按鈕如何,似乎都可以修改列表中最后一項的文本視圖。
這是因為您使用的是holder
。 渲染完成后ListView
它在最后一個項目的參考ListView
,所以只有最后一個項目,不論更新在其上單擊按鈕的項目。 您需要將單擊了按鈕的項目的引用傳遞給ATask
類。
加
holder.Buton.setTag(holder);
后
convertView.setTag(holder);
在getView()
方法中
像這樣在ATask
類中創建一個類級變量
ViewHolder myHolder;
在ATask
添加
public ATask(ViewHolder view) { myHolder = view; }
像這樣更改ATask
調用
new ATask((ViewHolder) v.getTag()).execute(site);
在PostExecute
將所有holder
替換為myHolder
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.