2012-10-24 2 views
0

나는 이것에 대한 검색 및 검색을했지만 불행히도 이전에 사용자 정의 대화 상자에서 팽창 된 뷰를 재사용하는 방법에 대한 유용한 정보를 찾지 못했습니다.사용자 정의 대화 상자에서 매번 팽창을 막으십시오.

내가 무엇을해야 세계로 내에 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(); 

그러나이 같은 오류 출력을 제공 추락했다.

물론 출력을 읽고 부모를 찾으려고 했으므로 부모가 대화 자체 일 것이라고 추측했지만보기를 제거 할 수있는 방법이 없으므로 실제로 무엇을 알지 못합니다. 할 것.

또한 텍스트 뷰 참조를 다시 사용할 수있는 방법이 있습니까?

(난 그냥 작동 얻을 싶어 내가 제대로 리팩토링거야, 그것은 잘못 코딩 압니다.

+0

경고 대화가 특히 중요합니까? 대화식이되기를 원하지 않는 것처럼 보이기 때문에 원하는 경우 달성 할 수있는 맞춤 토스트 대화 상자 = 새로운 토스트 (활동)을 사용할 수 있습니다. – gaara87

+0

전혀 대화 형이 아니며, 정보를 표시 할 뿐이지 만 복잡한 컨트롤 (이미지 뷰, 목록)을 표시하기 때문에 토스트만으로는 충분하지 않습니다. – Areks

+0

또한 inflate()의 두 번째 매개 변수를 사용하면 도움이 될 수도 있습니다. – gaara87

답변

0

을 이미 그것을 해결

나는 AlertDialog.Builder이 아니며, AlertDialog이 아닙니다. 내가 이것을 dialog이라고 선언했을 때 내가 생각하고 있던 것을 전혀 모른다.

방금 ​​AlertDialog를 선언하고 builder.create()이라는 결과를 할당했으며 이제는 의도적으로 작동하여 한 번 팽창했습니다.

@Laurence Dawson에게 특별히 감사드립니다. 그의 대답은 제 코드가 잘못되었음을 깨닫게했습니다.

1

을 취소하거나 대화 상자를 취소하면 팽창 된 뷰를 제거해야합니다. 다음 코드는 않습니다 문제는 다음과 같은 한

:이 :.

dialog.setOnDismissListener(new OnDismissListener() { 
    @Override 
    public void onDismiss(DialogInterface dialog) { 
    try{ 
     ((FrameLayout)detailView.getParent()).removeView(detailView); 
    }catch(Exception e){ 
     //todo handle the case detailView doesn't have a parent 
    } 
    } 
}); 

그런 다음 새 대화에 detailView을 다시 추가 할 수 있습니다

+0

대답이 아니지만 답변을 들었 기 때문에 응답이 나에게 올바르게 객체 이름을 지정하지 못했음을 알게 되었기 때문에 저는 여러분에게 상향식 응답을 보냅니다. 그래서 완전히 유용했습니다. 사실 나는 AlertDialog.Builder 인 "대화 상자"에 OnDismissListener를 설정하려고했기 때문에. 정말 고마워요! – Areks

+0

다른 사람이 대화 상자의 사용자 지정보기를 제거하는 방법을 보는 것이 유용 할 것이므로이 점을 올바르게 표시 할 것입니다. – Ljdawson

관련 문제