ボタンを押すと、リストビュー内の単一の行を異なる内容で更新したいと考えています。私はnotifydatasetchanged(
を使うことができると知っていますが)それはlistView
全体を更新するでしょう。ListView単一の行を更新する
私はこれをanswerと読みました。これは私がしたいことに完全に合っています。
私は5行のリストビューを行いました。ボタンを押すと、4行目を別のテキストに更新したいと思います。私はテキストをプログラマチックに設定したくないのです。これは単なる行をリフレッシュできるかどうかを確認するためのダミープロジェクトです。私の実際のプロジェクトはちょうどtextview
より複雑です。
私の質問はの1行を更新するのにgetView()
を使うことができますか?ここで
は私のコードです:
私の活動:
public class MainActivity extends Activity {
public ListView list1;
public listAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list1 = (ListView) findViewById(R.id.my_list);
adapter = new listAdapter(this);
list1.setAdapter(adapter);
Button button1 = (Button) findViewById(R.id.my_button);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
adapter.setText("Different text");
View row2Update = list1.getChildAt(3);
list1.getAdapter().getView(3, row2Update, list1);
}
});
}
}
マイアダプタ:
012:
public class listAdapter extends BaseAdapter{
public Activity activity;
public String text="Normal Text";
public listAdapter(Activity activity){
this.activity = activity;
}
public void setText(String text){
this.text = text;
}
public int getCount() {
return 5;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = activity.getLayoutInflater();
LinearLayout rowView = (LinearLayout) inflater.inflate(R.layout.row_layout, null);
TextView textView = (TextView) rowView.findViewById(R.id.row_text);
textView.setText(text);
return rowView;
}
}
これは、活動は次のようになります
しかし、私は私のボタンは何もできないコールgetViewメソッド()アダプタ自分の方法あなた
偉大な答え。仰るとおりです。彼が行うことができるもう一つのことは、ListView自体に対してonItemClickListenerを設定するだけです。位置が何であれ(ボタンを使用しないと仮定した場合)、アダプタのリストを更新するだけです。もちろん、最終的に彼はどのオプションが彼にとって最善であるかを理解する必要があります。 – Andy
@Andy:そうです。実際それはより良いアイデアでしょう。しかし、彼は具体的にボタンのクリックで行の内容を変更するように依頼して以来、私はこれに行きました。 – Ashwin
:)ああ、あなたは技術的に正しいです@Ashwinただそのより効率的です。不必要な作業は一切行われません。彼は1行だけを更新したいからです。しかし、彼はこれは単なるテストであると言います。私は、彼はまた、もっと更新したいと思っている場合には、別の方法も持っているはずです。 – Andy