将参数传递给 XML 布局中定义的片段

Posted

技术标签:

【中文标题】将参数传递给 XML 布局中定义的片段【英文标题】:Passing argument to fragment that is defined in XML layout 【发布时间】:2015-12-21 05:11:29 【问题描述】:
public class ActivityA extends AppCompatActivity 
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_one);
    

activity_one.xml

<fragment
    android:id="@+id/fragment"
    class="com.emoontech.waternow.FragmentA"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_/>

片段A

public class FragmentA extends Fragment
    public static FragmentEditEvent newInstance(String param1, String param2) 
        FragmentEditEvent fragment = new FragmentEditEvent();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    

//点击按钮时从另一个Activity

Intent intent = new Intent(this, ActivityA.class);
intent.putString("param1","val1");
intent.putString("param2","val2");
startActivity(intent);

//如何将这两个值发送给FragmentA?

【问题讨论】:

检查这个Answer的问题是相似的 How to pass values between Fragments的可能重复 我已经调查过了。你这么说,我不能在 activity_main.xml 中使用 吗?我是否必须在活动的 onCreate() 中创建片段实例并传递参数? 【参考方案1】:

回答我在那里https://***.com/a/32748751/3301009 在活动之间共享数据非常通用,也可以用于片段

【讨论】:

【参考方案2】:

试试这个

        // From ActivityA
        // retrieve the content of the intent from the previous activity
        protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment); // set content view to layout

        String param1Text= getIntent().getStringExtra("param1");
        String param2Text = getIntent().getStringExtra("param2");

        // this will pass the parameter to the fragment
        Fragment frament = FragmentA.newInstance(param1Text, param2Text);
        // use the fragment for what you desire

    

【讨论】:

【参考方案3】:

发现无法直接将参数传递给faragment,但替代方法是使用片段管理器并在活动中执行findFragmentById()以获取片段并根据需要设置日期。

编辑: If I declare a fragment in an XML layout, how do I pass it a Bundle?

【讨论】:

以上是关于将参数传递给 XML 布局中定义的片段的主要内容,如果未能解决你的问题,请参考以下文章

如何使用底部导航视图和 Android 导航组件将参数传递给片段?

如何将参数传递给 JSP 组件?

Android 数据绑定将参数传递给 onClick 方法

将 xml 字符串参数传递给 SQL Server 存储过程

导航架构组件 - 将参数数据传递给startDestination

将 xml 作为参数传递给 SQL Server 中的存储过程