0
FATAL EXCEPTION: 

java.lang.NullPointerException: Attempt to invoke virtual method 
    'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a 
    null object reference at android.view.LayoutInflater.from(LayoutInflater.java:219) 
    at com.Infoniq.restaurantapp.Fragment.HomepageFragment.Alertdailg(HomepageFragment.java:148) 
    at com.Infoniq.restaurantapp.Fragment.LoginPatternFragment$1.run(LoginPatternFragment.java:116) 

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

if (response.contains("Successfully")) { 
    final HomepageFragment hpf=new HomepageFragment(); 
    hpf.Alertdailg(); 
} 

HomepageFragment.java

public void Alertdailg() { 
    LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); 
    final View prmpview = layoutInflater.inflate(R.layout.billmode_alert, null); 
    final AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create(); 
} 

ответ

0

Вы пытаетесь вызвать getActivity() в HomepageFragment перед ним прилагается к деятельности.

Вы должны прикрепить его первый, используя FragmentManager, как это:

FragmentManager fragmentManager = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager 
     .beginTransaction(); 
HomepageFragment hpf = new HomepageFragment(); 
fragmentTransaction.add(R.id.container, hpf); 
fragmentTransaction.commit(); 
hpf.Alertdailg() 
0

Fragment объекты имеют жизненный цикл, который привязан к Activity который отображает его. Когда вы вызываете new, вы только что создали объект, но не привязали его вообще. Вам нужно добавить его в Activity с помощью FragmentManager:

FragmentManager fm = getFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
HomepageFragment hpf = new HomepageFragment(); 
ft.add(R.id.container, hpf); 
ft.commit(); 

Однако вы не можете вызвать метод Alertdailg() в данный момент, так как Fragment до сих пор не прошли через его жизненный цикл еще. Если вы всегда хотите отобразить это диалоговое окно, когда сначала отображается Fragment, вам нужно сделать это в обратном вызове onResume()Fragment. В это время будут добавлены Activity. Вы также можете получить Activity в методе onAttach()Fragment. Пока этот обратный вызов не будет выполнен, Fragment не подключен.

0

Вам нужна ссылка в контексте родительской активности. Для этого вам нужно создать локальную переменную контекста.

private Context context; 

Затем получите ссылку на контекст, когда ваш фрагмент присоединен к FragmentActivity. См. Код.

@Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     this.context=context; 
    } 

Теперь передайте переменную локального контекста в метод AlertDialog (контекстный контекст) и используйте его.

Смежные вопросы