カスタム ダイアログにラジオ ボタンとテキストビューがあります。約250項目あるので、リストビューを使用しています。
ラジオボタンに OnCheckedStateListener を設定しています。状態が変わるたびに、リスナーのダイアログを閉じます。そして、デフォルトで1つの項目をチェック済みに設定しています。
しかし、ダイアログを 2 回目に開くと、ダイアログが開く前に OnCheckedStateListener が呼び出され、アプリケーション全体がクラッシュします。
私はホルダービューパターンに従っています。このシナリオでサンプルコードを使用してビューホルダーパターンを使用するための正しいアプローチを誰かに提案してもらえますか、またはウェブ上の良い資料を指摘してもらえますか。
この質問を投稿する前に、よく検索しました。しかし、何も役に立ちませんでした。
前もって感謝します。
編集:
私も試してみましonclickListener
たが、ダイアログの表示ビューで一番上または一番下のものを選択すると、時々機能しませんでした...奇妙な..onFocusChangeListener
同様に。
編集:
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new RecordHolder();
holder.txtTitle = (TextView) row.findViewById(R.id.item_text);
holder.radiobutton = (RadioButton)row.findViewById(R.id.radiobutton);
holder.radiobutton.setOnCheckedChangeListener(new
CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if(buttonView.isChecked()){
// this call back listener will dismiss the dialog
// from the fragement where I have called
mCallbackListnr.stateUpdated(pPosition);
}
}});
row.setTag(holder);
} else {
holder = (RecordHolder) row.getTag();
}
Item item = data.get(position);
// i am setting the state as checked here
if(item.id.equals(selectedItem.id)){
holder.radiobutton.setChecked(true);
}else{
holder.radiobutton.setChecked(false);
}
holder.txtTitle.setText(item.getTitle());
}