2
私はテキストビュー、editText、およびボタンを行に持つカスタムのlistViewを持っています。 listViewはアダプタで作成されます。
ボタンを押したときにeditTextに入力された値でtextViewを更新したいとします。 リスト全体を更新せずにこれを実行したいです。
アイデアリストから行を1つだけ更新する方法はありますか?
ありがとうございます!カスタムリストの項目から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;
}
}
実際のビューが表示されていることを確認してください。このアプローチは、リストがスクロールするときに同じテキストビューが繰り返しリサイクルされるので、奇妙な動作を引き起こす可能性があります。 –
変更したい実際のビューを取得する方法がわかりません。 – addru
アクティビティのonCreateメソッドには、 'setContentView(R.layout.main); 'などの行があります。これは、アクティビティのビューを設定する行です。このxmlファイル(res/layout/main.xmlの場所)には、textview、edittext、およびbuttonが必要です。あなたは 'android:id =" @ + id/myTextView "'のようなオブジェクトの名前を設定するために 'android:id'属性を使うことができます – Phil