Activity与Fragment之间传递参数

      在Activity中加载Fragment的时候需要传值到另Fragment,也就是说Activityg与Fragment之间进行参数的传递,可以使用bundle进行参数传递,看代码:
      在activity中获取fragment中的数据
     
public class SaleQuoteActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.other_main);
        //在activity中获取相对应的fragment中的数据
        getSupportFragmentManager().beginTransaction().replace(R.id.detail_contain, SaleQuoteFragmentV2.newInstance(getIntent().getStringExtra(ConstantsRoseFashion.KEY_P_ID))).commit();
    }

    //@DebugLog
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

      在上面的代码中我们看到了activity在获取fragment中的数据时调用了fragment的newInstance()这个方法,那么下面我们来看看在这个方法中我们做了哪些事情呢
     
public static SaleQuoteFragmentV2 newInstance(String pid) {
        //通过Bundle保存数据
        Bundle args = new Bundle();
        args.putString(ConstantsRoseFashion.KEY_P_ID, pid);
        SaleQuoteFragmentV2 fragment = new SaleQuoteFragmentV2();
        //将Bundle设置为fragment的参数
        fragment.setArguments(args);
        return fragment;
    }

      从这个方法中我们可以看到在Fragment中我们把需要传递的数据通过Bundle保存起来并且将这个Bundle设置成Fragment的参数,然后将这个Fragment对象返回,这样我们在Activity中就通过newInstance()这个方法取到了Fragment对象。

      上面讲了怎样将Fragment中的数据传递到Activity当中,下面来看一下在Fragment中是如何取到从Activity中传递过来的数据的,其实非常的简单,看下面的码:
     
String pid = getArguments().getString(ConstantsRoseFashion.KEY_P_ID);

      就这么一句话就可以了,非常简单吧!


      上面说的都是传递的基本数据类型的数据,那么怎么传递一个Java Bean对象呢?
      接着看下面的代码吧:
     
Intent intent = new Intent(context, GlobalPriceActivity.class);
        intent.putExtra(ConstantsRoseFashion.KEY_DATA, data != null ? new Gson().toJson(data) : null);
        context.startActivity(intent);

      在这里我是通过Gson将这个Java Bean转换成一个gson字符串传递到Activity中的,然后从Activity传递到Fragment中,这个上面说过了在这里就不重复了,下面看看我们在Fragment中是如何将这个gson字符串转成一个Java Bean的
     
String json = getArguments().getString(ConstantsRoseFashion.KEY_DATA);
        singleGoods = new Gson().fromJson(json, SingleGoods.class);

      当然在转换前要定义好这个Java Bean,这个我就不多说了,大家可以自己去试试。

猜你喜欢

转载自scarlettli.iteye.com/blog/2199447