こんにちは、個々の項目ごとに 4 つのラジオボタンがあるリストビューがあります。ユーザーがアイテムをクリックすると、ラジオボタンの選択を変更できる新しいアクティビティが表示されます。ただし、戻るボタンを押してリストビューに戻った後、新しく選択したラジオボタンは更新されません。notifyDataSetChanged() を試しましたが、うまくいきません。この問題にアプローチする方法はありますか?
public class WordListActivity extends ListActivity {
DatabaseHandler db;
List<VocabWord> wordlist;
CustomWordListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_word_list);
db=new DatabaseHandler(this);
wordlist = db.getAllVocabWords();
adapter = new CustomWordListAdapter(this, (new ArrayList(wordlist)));
setListAdapter(adapter);
}
アダプタ クラス:
public class CustomWordListAdapter extends BaseAdapter {
private ArrayList listData;
private LayoutInflater layoutInflater;
public CustomWordListAdapter(Context context,ArrayList listData){
this.listData = listData;
layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final DatabaseHandler db= new DatabaseHandler(parent.getContext());
ViewHolder holder;
if(convertView == null){
convertView = layoutInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.wordView=(TextView)convertView.findViewById(R.id.word_list_view_item);
holder.definitionView=(TextView)convertView.findViewById(R.id.definition_list_view_item);
holder.radiogroupView=(RadioGroup)convertView.findViewById(R.id.radioCategoryGroup_list);
holder.defaultButton = (RadioButton) convertView.findViewById(R.id.default_radiobutton_list);
holder.redButton = (RadioButton) convertView.findViewById(R.id.red_radiobutton_list);
holder.yellowButton = (RadioButton) convertView.findViewById(R.id.yellow_radiobutton_list);
holder.greenButton = (RadioButton) convertView.findViewById(R.id.green_radiobutton_list);
List<VocabWord>words1 = db.getAllVocabWords();
switch(words1.get(position).getCategory())
{
case 0:
holder.defaultButton.setChecked(true);
break;
case 1:
holder.redButton.setChecked(true);
break;
case 2:
holder.yellowButton.setChecked(true);
break;
case 3:
holder.greenButton.setChecked(true);
break;
}
holder.radiogroupView.setFocusable(false);
holder.radiogroupView.setFocusableInTouchMode(false);
convertView.setTag(holder);
} else{
holder = (ViewHolder) convertView.getTag();
}
final VocabWord word = (VocabWord)listData.get(position);
holder.wordView.setText(word.getWord());
holder.definitionView.setText(word.getDefinition());
holder.radiogroupView.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedCategory) {
switch(checkedCategory)
{
case R.id.default_radiobutton_word:
word.setCategory(0);
db.updateRow(word.getId(), 0);
break;
case R.id.red_radiobutton_word:
word.setCategory(1);
db.updateRow(word.getId(), 1);
break;
case R.id.yellow_radiobutton_word:
word.setCategory(2);
db.updateRow(word.getId(), 2);
break;
case R.id.green_radiobutton_word:
word.setCategory(3);
db.updateRow(word.getId(), 3);
break;
}
}
});
return convertView;
}
static class ViewHolder{
TextView wordView;
TextView definitionView;
RadioGroup radiogroupView;
RadioButton defaultButton;
RadioButton redButton;
RadioButton yellowButton;
RadioButton greenButton;
}
}
私の「新しいアクティビティ」には、新しく選択したラジオボタンをデータベースに入れるリスナーがあります。