【问题标题】:start fragment from different class, not activity class从不同的类开始片段,而不是活动类
【发布时间】:2016-08-05 07:03:40
【问题描述】:

我有一个 Fragment_main 需要访问一个类来检查是否登录。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_fragment__main, container, false);

        session = new SessionManager(getContext());

        session.valida();
}

在 session.valida() 中,检查是真还是假。

public void valida(){

    if(valida){
        Open fragment_login
    }
    else
    {
        open fragment_main
    }
}

如果为真打开fragment_login,如果为假打开fragment_main。

我使用了许多意图和片段管理器来启动,但它不起作用。

【问题讨论】:

    标签: android class fragment


    【解决方案1】:

    试试这个

    这是activity_main.xml

    <LinearLayout
                android:id="@+id/layout_main"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                <FrameLayout
                    android:id="@+id/content_main"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
    </LinearLayout>
    

    在 YourNameFragment.class 中

     if(valida){
        FragmentManager manager = getActivity().getSupportFragmentManager();
        manager.beginTransaction()
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                .replace(R.id.content_main, new OpenFragment())
                .commit();
    }
    else
    {
        FragmentManager manager = getActivity().getSupportFragmentManager();
        manager.beginTransaction()
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                .replace(R.id.content_main, new MainFragment())
                .commit();
    }
    

    【讨论】:

      【解决方案2】:

      让我拿这个

      if (valid) {
          MainFragment mainFragment = new MainFragment();
          FragmentTransaction transaction = getActivity().getFragmentManager().beginTransaction();
          transaction.replace(R.id.fragment_container, mainFragment);
          transaction.commit();
      }
      else{
          LoginFragment loginFragment = new LoginFragment();
          FragmentTransaction transaction = getActivity().getFragmentManager().beginTransaction();
          transaction.replace(R.id.fragment_container, loginFragment);
          transaction.commit();
      }
      

      我帮过忙

      【讨论】:

      • 不工作,显示此错误:04-13 20:26:47.521: E/AndroidRuntime(32655): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.jdnetservices.pcm /br.com.jdnetservices.pcm.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.app.FragmentManager android.app.Activity.getFragmentManager()”
      • 如果你正在使用 appcompact 试试这个 getActivity().getSupportFragmentManager()
      【解决方案3】:

      你不能只构造一个FragmentManager 并使用它。您需要在片段或活动中调用getFragmentManager() 并将其传递给SessionManager

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-06
        • 2019-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多