【Android开发】从Activity传递信息给Fragment

假设现在要从fromActivity中传递信息给toFragment。
原来的代码大概是下面这样的:

//fromActivity.java
public class fromActivity extends FragmentActivity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_from);

        //这里是android.support.v4包中的FragmentManager
        FragmentManager fm = getSupportFragmentManager();
        Fragment tofragment = fm.findFragmentById(R.id.fragment_container);
        if (tofragment == null)
        {
            tofragment = new toFragment();
            fm.beginTransaction().add(R.id.fragment_container, tofragment).commit();
        }
    }
}

我们要用argument来传递信息给Fragment(实际上就是给他个有额外信息的Bundle),而这个argument应该在创建Fragment的时候就放进去,也就是这个地方:tofragment = new toFragment();
但是由于Bundle中的额外信息是以键值对的形式储存的(详见我的文章:【Android开发】启动Activity并传递信息),所以最好能把这段代码放在toFragment中来实现。
在toFragment.java中添加如下代码:

private static final String ARG_KEY = "...";

public static toFragment newInstance(Value value)
//这里的Value是封入argument的数据的类型
//当然数据可以有多个
{
    Bundle args = new Bundle();
    //注意这里与“向Intent中放入额外信息”的微妙差别
    //这里要区分放入的类型,而Intent那里不用
    //这里假设Value是一个类
    args.putSerializable(ARG_KEY, value);
    //所以如果Value是int,代码会是这样的:
    //args.putInt(ARG_KEY, value);

    toFragment fragment = new toFragment();
    //设置argument
    fragment.setArguments(args);
    return fragment;
}

接着将fromActivity.java中的这段代码tofragment = new toFragment();改为:

tofragment = toFragment.newInstance(value);

最后在toFragment的onCreate(...)方法中将argument提取出来并赋值给类的相应成员即可:

@Override
public void onCreate(...)
{
    ...

    //通过键来获取放入的信息
    //这里的语法也和“从Intent中取出信息”有着微妙的不同
    mValue = (Value) getArguments().getSerializable(ARG_KEY);
}

通过这个方法,也可以实现从“Fragment启动Activity并将信息传给托管在这个Activity中的Fragment”这一需求了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值