Android 我无法从此片段活动中使用此方法
LoginPatternFragment.javaAndroid 我无法从此片段活动中使用此方法,android,android-activity,android-fragmentactivity,layout-inflater,Android,Android Activity,Android Fragmentactivity,Layout Inflater,LoginPatternFragment.java 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
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)
if (response.contains("Successfully")) {
final HomepageFragment hpf=new HomepageFragment();
hpf.Alertdailg();
}
HomepageFragment.java
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)
if (response.contains("Successfully")) {
final HomepageFragment hpf=new HomepageFragment();
hpf.Alertdailg();
}
在HomepageFragment附加到“活动”之前,您试图在HomepageFragment中调用
getActivity()
您需要先使用FragmentManager连接它,如下所示:
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();
}
Fragment
对象的生命周期与显示它的活动相关联。调用new
时,您刚刚创建了对象,但根本没有附加它。您需要使用碎片管理器将其添加到活动中
:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
HomepageFragment hpf = new HomepageFragment();
fragmentTransaction.add(R.id.container, hpf);
fragmentTransaction.commit();
hpf.Alertdailg()
但是,此时仍然无法调用Alertdailg()
方法,因为片段还没有经历其生命周期。如果您总是希望在第一次显示片段时显示此对话框,则需要在片段的onResume()回调中执行此操作。此时将附加活动
。您还可以在片段的onAttach()
方法中获得活动。在执行回调之前,不会附加片段。您需要父活动上下文的引用。首先,您需要创建一个局部上下文变量
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
HomepageFragment hpf = new HomepageFragment();
ft.add(R.id.container, hpf);
ft.commit();
然后在片段附加到FragmentActivity时获取上下文的引用。请参阅代码
private Context context;
现在将本地上下文变量传递给AlertDialog(上下文)方法并使用它