나는 이것에 대한 검색 및 검색을했지만 불행히도 이전에 사용자 정의 대화 상자에서 팽창 된 뷰를 재사용하는 방법에 대한 유용한 정보를 찾지 못했습니다.사용자 정의 대화 상자에서 매번 팽창을 막으십시오.
내가 무엇을해야 세계로 내에 AlertDialog 빌더를 유지하고 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 outpu LogCat outpu t :
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();
그러나이 같은 오류 출력을 제공 추락했다.
물론 출력을 읽고 부모를 찾으려고 했으므로 부모가 대화 자체 일 것이라고 추측했지만보기를 제거 할 수있는 방법이 없으므로 실제로 무엇을 알지 못합니다. 할 것.
또한 텍스트 뷰 참조를 다시 사용할 수있는 방법이 있습니까?
(난 그냥 작동 얻을 싶어 내가 제대로 리팩토링거야, 그것은 잘못 코딩 압니다.
경고 대화가 특히 중요합니까? 대화식이되기를 원하지 않는 것처럼 보이기 때문에 원하는 경우 달성 할 수있는 맞춤 토스트 대화 상자 = 새로운 토스트 (활동)을 사용할 수 있습니다. – gaara87
전혀 대화 형이 아니며, 정보를 표시 할 뿐이지 만 복잡한 컨트롤 (이미지 뷰, 목록)을 표시하기 때문에 토스트만으로는 충분하지 않습니다. – Areks
또한 inflate()의 두 번째 매개 변수를 사용하면 도움이 될 수도 있습니다. – gaara87