如何将捆绑从一个活动传递到放置在另一个活动中的片段?

Posted

技术标签:

【中文标题】如何将捆绑从一个活动传递到放置在另一个活动中的片段?【英文标题】:how to pass bundle from an activity to a fragment which is placed in another activity? 【发布时间】:2020-05-28 20:03:14 【问题描述】:

我用过bundle来传递flag,但是没用!

 PersonalInfoFragment fragment=new Personal Info Fragment();
 Bundle bundle=new Bundle();
 bundle.put String("key","update");
 fragment.setArguments(bundle);
 Intent intent=new Intent(DataDisplayActivity.this,ProfileCompletionActivity.class);
 startActivity(intent);

【问题讨论】:

【参考方案1】:

您需要在片段管理器的帮助下加载片段。比你可以传递片段中的数据。

MainActivity.kt

class MainActivity : AppCompatActivity() 

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

            // create fragment instance
            val fragment : FragmentName = FragmentName.newInstance()

            // for passing data to fragment
            val bundle = Bundle()
            bundle.putString("data_to_be_passed", DATA)
            fragment.arguments = bundle

            // check is important to prevent activity from attaching the fragment if already its attached
            if (savedInstanceState == null) 
                supportFragmentManager
                    .beginTransaction()
                    .add(R.id.fragment_container, fragment, "fragment_name")
                    .commit()
            
        

    

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    tools:context=".ui.MainActivity">

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_
        android:layout_
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

片段名称.kt

 class FragmentName : Fragment() 

        companion object 
            fun newInstance() = FragmentName()
        

        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? 

            // receiving the data passed from activity here
            val data = arguments!!.getString("data_to_be_passed")
            return view
        

        override fun onActivityCreated(savedInstanceState: Bundle?) 
            super.onActivityCreated(savedInstanceState)
        

    

【讨论】:

【参考方案2】:

从第一个活动到第二个活动的第一个传递值,例如

        Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
        intent.putExtra("value",value.toString);
        startActivity(intent);

在第二次活动中获得价值,例如

Bundle bundle = getIntent().getExtras();
        if (bundle != null)
            value = bundle.getString("value","");
        

在加载时将第二个活动的值发送到片段,例如

 FragmentManager fragmentManager = getSupportFragmentManager();
                            Bundle bundle = new Bundle();
                            bundle.putString("value", "anyvalue you want to send");
                            PersonalInfoFragment frag = new PersonalInfoFragment();
                            frag.setArguments(bundle);
                            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                            FragmentTransaction fragmentTransaction.replace(R.id.fragment_container, frag, null);
                            fragmentTransaction.addToBackStack(null);
                            fragmentTransaction.commit();

现在在片段中获取价值,例如

if(getArguments() != null) 
            totalValue = getArguments().getString("value");
        

【讨论】:

以上是关于如何将捆绑从一个活动传递到放置在另一个活动中的片段?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从一个活动传递到android中的另一个活动片段? [复制]

如何将值从一个活动中的片段传递到另一个活动? [复制]

Java Android - 将数据从活动发送到片段

如何使用菜单按钮将数据从活动传递到android中的片段?

如何将值从片段/活动传递到 xml?

从另一个活动的活动中的片段传递数据