2
我有一個自定義listView與textView,editText和一行上的按鈕。 listView是使用適配器創建的。
我想用editText中輸入的值更新textView,當我按下按鈕時。 我想在不刷新整個列表的情況下執行此操作。
任何ideea如何更新列表中只有一行?
謝謝!從自定義列表視圖中的項目更新textView Android
更清楚,我會提供代碼:
私有靜態類EfficientAdapter延伸BaseAdapter { 私人LayoutInflater mInflater; 上下文myContext;
public EfficientAdapter(Context context) {
mInflater = LayoutInflater.from(context);
myContext = context;
}
public int getCount() {
return nameList.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView,
ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.travelpassengers_item,
null);
holder = new ViewHolder();
holder.ratingTv = (TextView) convertView
.findViewById(R.id.tvTPRating);
holder.rateBtn = (Button) convertView
.findViewById(R.id.btnTPRate);
holder.plusBtn = (Button) convertView
.findViewById(R.id.btnPlus);
holder.minusBtn = (Button) convertView
.findViewById(R.id.btnMinus);
holder.rateEt = (EditText) convertView
.findViewById(R.id.etTPRating);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.ratingTv.setText(rating[position] + "/10");
holder.callBtn.setTag(phoneList[position]);
holder.ratingBtn.setTag(ids[position]);
holder.ratingDisableBtn.setTag(numberRates[position]);
holder.ratingTv.setTag(rating[position]);
holder.rateEt.setTag(position);
holder.rateBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String id = holder.ratingBtn.getTag().toString();
int position = Integer.parseInt(holder.rateEt
.getTag().toString());
double oldRate = Double
.parseDouble(rating[position]);
int number = numberRates[position];
double newRate = Double.parseDouble(holder.rateEt
.getText().toString());
DecimalFormat oneDigit = new DecimalFormat(
"#,##0.0");
number++;
double avg = (oldRate + newRate)/number;
newRate = Double.valueOf(oneDigit.format(avg));
// I want to put the value from newRate in the holder.ratingTv on right position without updating entire listView.
}
}
});
holder.plusBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
int rate = Integer.parseInt(holder.rateEt.getText()
.toString());
if (rate < 10) {
rate++;
holder.rateEt.setText(Integer.toString(rate));
}
}
});
holder.minusBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
int rate = Integer.parseInt(holder.rateEt.getText()
.toString());
if (rate > 0) {
rate--;
holder.rateEt.setText(Integer.toString(rate));
}
}
});
return convertView;
}
static class ViewHolder {
public TextView ratingTv;
public Button minusBtn, plusBtn;
public EditText rateEt;
public Button rateBtn;
}
}
確保您獲得所需的實際視圖。這種方法可能會導致奇怪的行爲,因爲當列表滾動時,相同的文本視圖會一遍又一遍地被回收。 – 2011-06-13 18:18:10
我不知道如何獲得我想要修改的實際視圖。 – addru 2011-06-16 16:41:03
在你的activity的onCreate方法中,有一行,如'setContentView(R.layout.main);'這是設置你的活動視圖的行。在這個xml文件(res/layout/main.xml中的位置)中,你應該有你的textview,edittext和button。你可以使用屬性'android:id'來設置對象的名字(比如'android:id =「@ + id/myTextView」') – Phil 2011-06-17 18:32:25