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