如何从具有可变的意图开始活动中开始片段



我有此代码可以在活动中打开片段。我想做的是称呼带有名称为"书"的片段。

    Intent intent = new Intent(this, Dashboard_Admin.class);
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    intent.putExtra("FragmentBooking", "book");
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

在带有片段的活动中,我有此代码

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dashboard_admin);
    Bundle extra = getIntent().getExtras();
    Toast.makeText(this, "test!!!!!!!!!!!!!!!!!!!!", Toast.LENGTH_SHORT).show();
    if (extra!=null){
        String idFrg = extra.getString("FragmentBooking");
        Toast.makeText(this, "Hello: "+idFrg, Toast.LENGTH_SHORT).show();
        if (idFrg.equals("book")){
            Log.d(TAG_SUCCESS, "Test");
            Fragment fragment = null;
            Class fragmentClass = null;
            fragmentClass = FragmentBookingKendaraan.class;
            try {
                fragment = (Fragment) fragmentClass.newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.beginTransaction().replace(R.id.flContentAdmin, fragment).commit();
        }
    }
}

但是,捆绑包总是无效的。这里怎么了?谢谢

尝试以下:

   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dashboard_admin);
        if (getIntent().getStringExtra("FragmentBooking")!=null){
            if (getIntent().getStringExtra("FragmentBooking").equals("book")){
                FragmentManager fragmentManager = getSupportFragmentManager();
                fragmentManager
        .beginTransaction()
        .replace(R.id.flContentAdmin, new FragmentBookingKendaraan())
        .commit();
            }
        }}

要从活动中调用您的片段,我有一种常见的方法。

public void showFragment(Fragment fragment, String back_stack_name, boolean isAddToBackStack) {
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        transaction.add(R.id.container, fragment);
        if (isAddToBackStack) {
            transaction.addToBackStack(back_stack_name);
        }
        transaction.commit();
    }

通过通过捆绑包来调用活动的片段。(在ongreate(((

中写下此代码
Classname classname = new Classname();
Bundle bundle = new Bundle();
bundle.putBundle("key", "value");
classname.setArguments(bundle);
showFragment(classname, fragment_name, true);

在fragment

 Bundle mBundle = getArguments();
    if (mBundle != null) {
       String variable = mBundle.getString("key");
    }

如果您不想将捆绑包到片段

Classname classname = new Classname();
showFragment(classname, fragment_name, true);

最新更新