1

getSupportFragmentManager()가 호출 될 때 내 응용 프로그램이 충돌하는 이유를 알아낼 수 없습니다. 다른 응용 프로그램에서 유사한 코드를 사용하여 아무런 경고없이 대화 상자를 만들었습니다 issues.please 도움!Fragment null은 인스턴스 상태에서 제대로 다시 생성하려면 public static 클래스 여야합니다.

DialogFragment df = new DialogFragment(){ 

     @NonNull 
     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
      View view = getActivity().getLayoutInflater().inflate(R.layout.addincome,null); 
      builder.setView(view); 
      //capture 
      final EditText amountEditText=(EditText)view.findViewById(R.id.edit_amount); 
      final EditText descriptionEditText=(EditText)view.findViewById(R.id.edit_description); 
      builder.setNegativeButton(android.R.string.cancel,null); 
      builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        newIncome.setAmount(Double.parseDouble(amountEditText.getText().toString())); 
        newIncome.setDescription(descriptionEditText.getText().toString()); 
        user.incomes.add(newIncome); 
        HashMap<String,User> modified = new HashMap<>(); 
        modified.put(uid,user); 
        rootref.setValue(modified); 
       } 
      }); 
      return builder.create(); 
     } 
    }; 
    df.show(getSupportFragmentManager(),"addIncome"); 

답변

0

나는이 단계를 수행했지만 당신이 코드가 다른 응용 프로그램에서 작동하는 경우 다음 몇 가지 .classes 문제들이해야하기 때문에? 당신의 APK를 다시 시도했다 묻는 알고있다.

+0

나는 시도했다 ... 여전히 작동하지 않았다 ... 나는 다른 응용 프로그램이 @suppresslint 옵션을 가지고 있다고 생각하지만 나는 초보자이며이 옵션을 추가하거나 확인하는 방법을 모른다. –

+0

당신은 서면에 의한 안드로이드 스튜디오에서 보풀은 build.gradle에 다음 lintOptions { abortOnError 거짓 } – shikhar

+0

도움이되지 않았다 .... –

0

귀하의 수입에있는 조각의 유형을 확인하십시오. android.support.v4.app.Fragment 또는 android.os.Fragment를 사용하고 있는지 여부.

+0

수입 android.support.v4.app.DialogFragment하지만 당신의 도움을 주셔서 감사합니다; –

4

DialogFragment은 익명 클래스이며 Java 익명 클래스는 부모 클래스로만 인스턴스화 할 수 있습니다. new DialogFragment()은 사실 this.new DialogFragment()입니다. 분명히 FragmentManager이 구성 변경시 DialogFragment을 다시 만들려고하면 부모 클래스의 인스턴스에 대한 액세스 권한이 없으므로 불가능합니다. 해결책은 static 서브 클래스 DialogFragment을 선언하거나 DialogFragment의 최상위 서브 클래스를 선언하고 익명 클래스 대신 사용하는 것입니다.

+0

또한 기본 (인수가없는) 생성자가 있어야합니다. – Karakuri

+0

@Karakuri, 좋은 점 – Egor

+0

나를 포함하는 컨텍스트를 만들고 context.new DialogFragment()를 사용할 수 있습니까? –