2012-12-10 1 views
0

이 코드는 listView의 항목을 클릭하면 경고 대화 상자를 표시합니다. 체크 박스 환경 설정을 추가 할 때까지는 모두 잘 돌아갔다. 나중에 다른 대화 상자가 텍스트 문자열을 입력 할 수 있어야한다.AlertDialog에서 체크 상자 레이아웃을 확대하면 텍스트보기 레이아웃이 적용되지 않습니다

AlertDialog.Builder helpBuilder = new AlertDialog.Builder(MyActivity.this); 

helpBuilder.setIcon(android.R.drawable.ic_dialog_info); 
adb.setTitle("title"); 
adb.setMessage("message"); 

     helpBuilder.setPositiveButton("positive", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 

         boolean fileRenameEnabled = settings.getBoolean("text_view", false); 
         if (fileRenameEnabled == true) { 
          AlertDialog.Builder adb = new AlertDialog.Builder(MyActivity.this); 
          LayoutInflater adbInflater = LayoutInflater.from(MyActivity.this); 
          View inputFilename = adbInflater.inflate(R.layout.dialog_text_view, null); 
          tv = (TextView) inputFilename.findViewById(R.id.tv); 
          tv.setHint("hint"); 

          adb.setView(tv); 
          adb.setTitle("New filename"); 

          adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int which) { 
            //some code here modifies method1() 
            method1(); 
           } 
          }); 
          adb.show(); 
         } else { 
          method1(); 
         } 
        } 
       }); 

       helpBuilder.setNeutralButton("neutral", new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int which) { 

         Checkbox1Enabled = settings.getBoolean("checkbox1", true); 
         if (Checkbox1Enabled == true) { 
          AlertDialog.Builder adb = new AlertDialog.Builder(MyActivity.this); 
          LayoutInflater adbInflater = LayoutInflater.from(MyActivity.this); 
          View info = adbInflater.inflate(R.layout.dialog_checkbox1, null); 
          cb = (CheckBox) info.findViewById(R.id.cb); 
          cb.setChecked(true); 
          adb.setView(info); 
          adb.setTitle("title"); 
          adb.setMessage("message"); 

          adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int which) { 
            if (cb.isChecked() == false) { 
             SharedPreferences.Editor editor = settings.edit(); 
             editor.putBoolean("checkbox1", false); 
             editor.commit(); 
             Checkbox1Enabled = settings.getBoolean("checkbox1", true); 
             Log.d(DEBUG_TAG, "Checkbox1Enabled: " + Checkbox1Enabled); 
            } 
            method2(); 
          } 
          }); 
          adb.show(); 
         } else { 
          method2(); 
         } 
        } 
       }); 
       AlertDialog helpDialog = helpBuilder.create(); 
       helpDialog.show(); 
      } 
}); 

}

사실은 내가 중립 버튼의 onClickListener 내부 거의 같은 일을하고 있어요이다; 유일한 차이점은 체크 박스 (대신 작동 ...) 대신 AlertDialog.Builder에있는 textView를 부 풀린다는 것입니다.

는 예외입니다 :

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 

어떤 도움이 많이 감사합니다. 감사합니다.

답변

0

팽창 된 레이아웃 대신 대화 상자의 내용으로 TextView을 추가하고 있습니다 (그리고 가장 가능성있는) TextView (이미 팽창 한 레이아웃에 부모가 있음). 다음과 같아야합니다 :

View inputFilename = adbInflater.inflate(R.layout.dialog_text_view, null); 
tv = (TextView) inputFilename.findViewById(R.id.tv); 
tv.setHint("hint"); 
adb.setView(inputFilename); 
+1

OMG. 나는 다른 말을하지 않는다. 고맙습니다. – dentex

관련 문제