代码总结:Fragment之间传递参数和Fragment返回上一个Fragment传回数据

1 Fragment之间传递参数

FirstFragment中点击rl_changerole打开SecondFragment,并传递参数。

FirstFragment.java中部分代码:

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.rl_changerole:
            SecondFragment crFragment = SecondFragment.newInstance(titleNames, titleType, parameter);
            crFragment.setTargetFragment(PersonFragment.this, 0);
            getFragmentManager().beginTransaction().replace(R.id.fl_content,crFragment)
                    .addToBackStack(null)
                    .commit();
            break;
        default:
            break;
    }
}
其实也可以不用调用SecondFragment的newInstance方法创建,通过以下这段代码实现,效果是一样的。
SecondFragment secondFragment = new SecondFragment();
Bundle args = new Bundle();
args.putStringArrayList("paramStr",titleNames);
args.putIntegerArrayList("paramInt",titleTypes);
args.putInt("knowcurrent",user.knowcurrent);
secondFragment.setArguments(args);
secondFragment.setTargetFragment(FirstFragment.this, 0);
getFragmentManager().beginTransaction().replace(R.id.fl_content,secondFragment)
    .addToBackStack(null)
    .commit();
 
SecondFragment.java类newInstance方法,在FirstFragment调用过。
public static SecondFragment newInstance(ArrayList<String> titleNames, ArrayList<Integer> titleTypes, int knowcurrent){
    SecondFragment fragment = new SecondFragment();
    Bundle args = new Bundle();
    args.putStringArrayList("paramStr",titleNames);
    args.putIntegerArrayList("paramInt",titleTypes);
    args.putInt("param",parameter);
    fragment.setArguments(args);
    return fragment;
}
SecondFragment.java中获取FirstFragment传递过来的参数。
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       View view = inflater.inflate(R.layout.fragment_changrole,container,false);
        if(getArguments() != null){
            titleNames = getArguments().getStringArrayList("paramStr");
            titleTypes = getArguments().getIntegerArrayList("paramInt");
            parameter= getArguments().getInt("param",-1);
        }
        return view;
    }

参数定义:
private ArrayList<String> titleNames;
private ArrayList<Integer> titleTypes;
private int parameter;


2 Fragment返回上一个Fragment传回参数问题
2.1如果直接返回不需要传参数:
getFragmentManager().popBackStack();
 
2.2如果点击返回需要传回参数,在SecondFragment.java中通过以下实现。
rl_item.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              sendResult(Activity.RESULT_OK);
              getFragmentManager().popBackStack();

          }
     });
sendResult方法
private void sendResult(int resultOk) {
        if(getTargetFragment() == null){
            return;
        }else{
            Intent i = new Intent();
            i.putExtra("selectItem",selectItem);
            getTargetFragment().onActivityResult(getTargetRequestCode(),resultOk,i);
        }
    }

在FirstFragment.java中通过onActivityResult方法获取传回的参数,具体如下:
 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode != Activity.RESULT_OK){
            return;
        }else{
            Integer str = data.getIntExtra("selectItem",-1);
            System.out.println("selectItem---"+str);
        }
    }


参考网上资料,包括https://www.kancloud.cn/digest/android-lxj/138593但不限于此。
 

3 在Fragment启动Activity

Fragment类提供了startActivity方法,Fragment启动Activity类与Activity类启动另一个Activity类方法一样。




  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值