【问题标题】:I cannot use this method from this fragment activity我无法从此片段活动中使用此方法
【发布时间】:2016-01-02 06:37:33
【问题描述】:
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();
}

【问题讨论】:

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


    【解决方案1】:

    Fragment 对象的生命周期与显示它的Activity 相关联。当您调用new 时,您刚刚创建了对象,但根本没有附加它。您需要使用FragmentManager 将其添加到Activity

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

    但是,此时您仍然不能调用Alertdailg() 方法,因为Fragment 还没有完成它的生命周期。如果您总是希望在首次显示Fragment 时显示此对话框,则需要在FragmentonResume() 回调中执行此操作。届时将附上Activity。也可以在FragmentonAttach()方法中获取Activity。在执行该回调之前,不会附加 Fragment

    【讨论】:

      【解决方案2】:

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

      private Context context;
      

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

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

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

      【讨论】:

        【解决方案3】:

        您尝试在 HomepageFragment 中调用 getActivity(),然后将其附加到活动。

        你需要先附加它,使用 FragmentManager,像这样:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-20
          • 2012-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多