【问题标题】:How to pass Bundle from Fragment to Fragment如何将 Bundle 从 Fragment 传递到 Fragment
【发布时间】:2013-06-12 10:37:56
【问题描述】:

我在我的应用程序中使用片段。这是我第一个简单地扩充 xml 文件的片段:

public class FragmentA extends SherlockFragment
{
    Context myContext,appContext;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    myContext = getActivity();
    appContext=getActivity().getApplicationContext();
    arguments = getArguments();
    doctor_id=arguments.getInt("doctor_id");
    userType=arguments.getString("userType");
    return inflater.inflate(R.layout.left_panel, container,false);
}

这是left_panel .xml,其中包含一个片段:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <fragment
        android:id="@+id/titles"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        class="com.example.sample.ListFrag" />

</LinearLayout>

这是我的 ListFrag 类:

public class ListFrag extends Fragment 
{
    Context myContext,appContext;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        layoutView = inflater.inflate(R.layout.activity_doctor_list,container);
        myContext = getActivity();
        appContext=getActivity().getApplicationContext();
        arguments=getArguments();
        int doctor_id=arguments.getInt("doctor_id");
}
}

我不知道如何将 Bundle arguments 从 FragmentA 传递到 ListFrag。

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    在您的 FragmentA 片段中,将捆绑包设置为参数。

    Bundle args = new Bundle();
    args.putInt("doctor_id",value);    
    ListFrag newFragment = new ListFrag ();
    newFragment.setArguments(args);
    

    在您的 ListFrag 片段中获取捆绑包

    Bundle b = getArguments();
    int s = b.getInt("doctor_id");
    

    【讨论】:

    • 但我只是在那个 xml 文件中加载 left_panel.xml 文件我给了片段名称......这是我调用另一个片段的方法......这里你的答案是合适的??跨度>
    • 查看onInflate()。创建您自己的属性,这些属性将被复制到 arguments.bundle 中。 link
    • 有一个选项可以通过 onInflate 函数为 xml 膨胀片段设置参数。我在上面的评论中给出了函数示例的链接。
    • @Tarun onInflate 从 XML 布局中获取参数,而不是从扩展布局的 Activity 或 Fragment 中获取参数,我相信这是 Vikky 所要求的。
    • 此代码错误。 String s = b.getInt("doctor_id"); 需要改成int s = b.getInt("doctor_id"); 小错误。 +1 虽然
    【解决方案2】:

    Fragment 到 Fragment 设置并获取参数:

    开始活动:

         int friendId = 2; //value to pass as extra 
         i = new Intent(firstActivity, SecondActivity.class);
         i.putExtra("friendsID", friendId);
         firstActivity.startActivity(i);
    

    第二个活动:

         Fragment_A mFragment_A = new Fragment_A();
         mFragment_A.setArguments(getIntent().getExtras());
    

    片段_A:

        Bundle bundle = new Bundle();
        String Item = getArguments().getString("friendsID");
        bundle.putInt("friendsID", Integer.parseInt(Item));
    
        // code
    
        Fragment_B mFragment_B = new Fragment_B();
        mFragment_B.setArguments(bundle);
    

    片段_B:

        Bundle bundle = getArguments();
        int value = bundle.getInt("friendsID");
    
        Log.e("value Fragment get Argument ", "friendsID :" + value);
    

    这对我有用,试试这个可能对你有帮助。

    【讨论】:

    • 还有一个完整的片段你怎么做?
    • @delive 我没听懂你吗?你能把你的问题说清楚吗?
    • @delive Fragment A-----"pass"----function_name(Data)--> FragmentActivity-----"get"----function_name(string data) - ----->这是一个循环
    • public void getFragment(Fragment frag){},我现在有:Class fragmentClass = fragmentCurrent; Fr f = (Fr) fragmentClass.newInstance(),但总是得到一个新实例...
    【解决方案3】:

    在ListFrag中创建一个ListFrag的静态方法如:

    public static ListFrag newInstance(int doctorId) {
      ListFrag frag = new ListFrag();
      Bundle args = new Bundle();
      args.putExtra("doctor_id", doctorId);
      frag.setArguments(args);
      return frag;
    }
    

    当您从 Fragment A 创建 ListFrag 时,您会调用:

    Fragment frag = ListFrag.newInstance(this.doctor_id);
    // use frag with getSupportChildFragmentManager();
    

    【讨论】:

    • 我没有从 FragmentA 创建 ListFrag .. 我在 xml 文件中使用 Fragment,然后从 FRagment A 扩充该 xml 文件。
    • 那么下面的 blackbelt 为您提供解决方案
    【解决方案4】:

    你有两个选择:

    A.如果我你有你的 ListFragment 的参考 您可以通过这样做为 FragmentA 设置目标片段:

    1. FragmentA this.setTargetFragment(yourListFragment);
    2. 然后this.getTargetFragment().setArguments(yourBundle);
    3. 并在 ListFragment 中用this.getArguments(); 取回它

    B.最合乎逻辑的方式

    我打赌你的片段在同一个活动中,所以她有它们的参考。 您可以将数据从 FragmentA 传递给您的活动,并将其传递给 ListFragment

    FragmentA --Data--> FragmentActivity --Data--> ListFragment

    【讨论】:

      猜你喜欢
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多