2016-07-26 2 views
0

Я пытаюсь загрузить фрагмент после ответа диалогового окна оповещения, но когда я пытаюсь загрузить logcat, вы увидите «IllegalStateException: Fragment не привязан к Activity». Обычно IllegalStateException возникает, когда вы пытаетесь выполнить работу после того, как фрагмент больше не привязан к Activity. но в моем случае все прекрасно, я не понимаю, почему фрагмент не привязан к активности.Как загрузить фрагмент с помощью AlertDialog?

это мой MainActivity:

с помощью этого класса я называю DilogCreate, который проходит DialogFragment.

public class MainActivity extends AppCompatActivity { 
Button btn; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btn= (Button) findViewById(R.id.button); 

     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       new DilogCreate(view.getContext(),R.string.tilte,R.string.no,R.string.yes); 
      } 
     }); 
    } 

это мой DilogCreate класс:

на основе диалога ответа решить фрагмент может быть загружен или нет, если диалоговое окно ответа да я называю другое имя деятельности Second.java в рамках этого класса я пытаюсь загрузить фрагмент ,

public class DilogCreate extends DialogFragment { 
     AlertDialog alertDialog; 


     public DilogCreate(final Context context, int tilte, int no, int yes) { 

      AlertDialog.Builder mAlertDilog = new AlertDialog.Builder(context); 

      mAlertDilog.setNegativeButton(yes, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 

        Intent intent = new Intent(context, second.class); 
        startActivity(intent); 
       } 
      }); 
      alertDialog = mAlertDilog.create(); 
      alertDialog.show(); 
     } 

    } 

это мой мой Second.java класс:

этот класс появляется из диалогового ответа и при этом классе я попытался загрузить фрагмент.

public class Second extends AppCompatActivity { 
    FragmentManager fragmentManager; 
    FragmentTransaction fragmentTransaction; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.loadFragment); 

     fragmentManager=getSupportFragmentManager(); 
     fragmentTransaction=fragmentManager.beginTransaction(); 

     Myfragment myfragment=new Myfragment(); 

     fragmentTransaction.replace(R.id.cont,myfragment); 
     fragmentTransaction.commit(); 
} 
} 

это MyFragment.java расширяет фрагмент:

public class Myfragment extends Fragment{ 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.frag,container,false); 
    } 
} 

Logcat Статус:

java.lang.IllegalStateException: Fragment DilogCreate{8aea1d4} not attached to Activity 

пожалуйста, помогите мне, ребята, я понятия не имею, почему приходит эта ошибка.

ответ

1
new DilogCreate(view.getContext(),R.string.tilte,R.string.no,R.string.yes); 

проход MainActivity.this вместо view.getContext() .Вы необходимо пройти контекст деятельности здесь.

+0

view.getContext() представляет собой контекст деятельности, так как такой же –

+0

Там нет никакой гарантии, что контекст, используемого вашего зрения Activity, и я думаю, что вы хотите передать ссылку Activity здесь для перехода к строителю. – codemonger

+0

Он понял. Кроме того, почему вы передаете строки в параметр int? – klutch

0

фрагмент представляет собой нагрузку на активность и один переключатель активности на другой, используя базовую ссылку, поэтому мне нужно вызвать метод startActivity(), используя базовую функцию refrence.

так я изменить метод startActivit() в классе DilogCreate так:

Intent intent=new Intent(context,Second.class); 
context.startActivity(intent);//make sure context is the refrence of the base context 
Смежные вопросы