ボタンを押すと、リストビューの単一の行を別のコンテンツで更新したいと考えています。を使用できることはわかっていますnotifydatasetchanged(
が、それは全体を更新しますlistView
。
私はこの回答を読みましたが、それは私がやりたいことに完全に適合しています。
5行のリストビューを作成しましたが、ボタンを押すと、4行目を別のテキストで更新したいと思います。これは単なるダミープロジェクトであり、単一の行を更新できるかどうかを確認するためのものであり、実際のプロジェクトはtextview
.
私の質問は次のとおりです。getView()
単一の行を更新するために使用できlistview
ますか?
これが私のコードです:
私の活動:
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);
}
});
}
}
私のアダプター:
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;
}
}
アクティビティは次のようになります。
でもボタンを押しても何も変わらない