我无法从此片段活动中使用此方法

时间:2016-01-02 06:37:34

标签: android android-activity android-fragmentactivity layout-inflater

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();
}

3 个答案:

答案 0 :(得分:0)

您在关联到活动之前尝试在HomepageFragment中调用getActivity()

您需要先使用FragmentManager附加它,如下所示:

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

答案 1 :(得分: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()的{​​{1}}回调中执行此操作。届时Fragment将被附加。您还可以在Activity的{​​{1}}方法中获取Activity。在执行回调之前,onAttach()未附加。

答案 2 :(得分:0)

您需要父活动上下文的引用。首先,您需要创建一个本地上下文变量。

$syslogInfo

然后在片段附加到FragmentActivity时获取上下文的引用。见代码。

my $string_to_find = <$keywordInfo>;
chomp $string_to_find;

# Now use $string_to_find in your regex.

现在将本地上下文变量传递给AlertDialog(Context context)方法并使用它。