【问题标题】:How to start Fragment in Activity From Pending Intent with variable如何使用变量从待定意图开始活动中的片段
【发布时间】:2017-05-03 18:22:11
【问题描述】:

我有这段代码可以在 Activity 中打开片段。我想要做的是调用一个名为“书”的片段。

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

但是,捆绑始终为空。这里有什么问题? 谢谢

【问题讨论】:

    标签: android android-fragments android-notifications android-pendingintent


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • @SugiAlmantara 什么捆绑包?没有捆绑了。意图对象内只有 1 个字符串
    • 我的意思是 getIntent().getStringExtra("FragmentBooking")!=null 仍然给 null 对不起
    【解决方案2】:

    要从 Activity 调用您的片段,我有一个通用类中的方法。

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

    从 Activity 调用片段并传递包。 (在onCreate()中写这段代码)

    Classname classname = new Classname();
    Bundle bundle = new Bundle();
    bundle.putBundle("key", "value");
    classname.setArguments(bundle);
    showFragment(classname, fragment_name, true);
    

    在片段中

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

    如果您不想将 bundle 传递给片段

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

    【讨论】:

      猜你喜欢
      • 2014-03-30
      • 1970-01-01
      • 2021-03-03
      • 2016-03-08
      • 2013-03-06
      相关资源
      最近更新 更多