私はこれについて検索して検索しましたが、残念ながら、カスタムダイアログで以前に膨らんだビューを再利用する方法についての有用な情報は見つかりませんでした。
これは私が試したものです(どれもうまくいきませんでした)
アプローチ1:
alertdialog Builderをグローバルに保ち、onCreate()
必要なことを実行します。
private AlertDialog.Builder dialog;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dialog = new AlertDialog.Builder(this);
detailView = getLayoutInflater().inflate(R.layout.detail, null);
TextView textview1 = (TextView)detailView.findViewById(R.id.lblName);
TextView textview2 = (TextView)detailView.findViewById(R.id.lblSubtitle);
textview1.setText("Test1");
textview2.setText("Test2");
dialog.setView(detailView);
dialog.create();
btnSearch = (ImageView)findViewById(R.id.btnSearch);
btnSearch.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dialog.show();
}
});
}
そして、必要なときにそれを表示します。dialog.show();
動作しませんでした、LogCat出力:
Uncaught handler: thread main exiting due to uncaught exception
java.lang.IllegalStateException: The specified child already has a parent.
You must call removeView() on the child's parent first.
アプローチ2:
onCreate()
レイアウトを膨らませてクリックイベントで:
dialog = new AlertDialog.Builder(this);
TextView textview1 = (TextView)detailView.findViewById(R.id.lblName);
TextView textview2 = (TextView)detailView.findViewById(R.id.lblSubtitle);
textview1.setText("Test1");
textview2.setText("Test2");
dialog.setView(detailView);
dialog.create();
しかし、クラッシュして同じエラー出力が表示されました。
もちろん、出力を読んで親を見つけようとしたので、親はダイアログ自体になると思いましたが、ビューを削除する方法がないため、どうすればよいかわかりません。
また、textview参照を再利用する方法はありますか?
(コーディングが不十分であることはわかっています。機能させたいだけで、適切にリファクタリングします。