Frgament与Activity之间交互(传值、对象的获取)

一:传值

1:Fragment传至Activity

先定义一接口用来回调,在Fragment中声明该接口,然后重写Fragment的onAttach()方法,最后Activity中实现回调接口 重写回调方法获取回传的值并显示。

示例:FrgamentOne传值到MainActivity*

Fragment.java

CallBackListener callBackListener();

public interface CallBackListener{
    public void sendData(String content);
}

@Override
public void onAttacth(Activity activity){
    super.onAttacth(activity);
    callBackListener = (CallBackListener) getActivity();
}
...
// Button Listener
button.setOnClickener(new View.OnClickListener(
    @Override
    public void onClick(View v){
    callBackListener().sendData("test content");
    }
));

MainActivity.java

public class MainActivity extends AppCompatActivity implements CallBackListener{
....
    @Override
    public void sendData(String content){
        String getData = content;
    }

}

2:Activity传至Fragment

先创建Fragment对象实例,然后调用Bundle来传值。值得注意的是,该传值过程必须要在FragmentTransaction.commit()完成之前。

示例:MainActivity.java传值到FragmentOne.java

MainActivity.java

FragmentOne fragmentOne = new FragmentOne();
Bundle bundle = new Bundle();
bundle.putString("key","value");
fragment.setArguments(bundle);

fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_test,fragmentOne);
fragmentTransaction.commit();

FragmentOne.java

String getData = getArguments().get("key");

3:Fragment传至Fragment

示例:FrgamentOne传值到FragmentTwo

FrgamentOne.java

Bundle bundle = new Bundle();
bundle.putString("key","value");

FrgamenTwo.java

Bundle bundle = getArguments();
String getData = bundle.get("key");

说明:该方式类似于Intent的使用。

二:对象的获取

1:Fragment获取Activity对象

Fragment是依附于Activity而存在的,其不能直接调用Activity一些特有方法和控件。使用以下语句来获得:

示例:

getActivity().findViewById(R.id.button_test);

或者

getActivity().finish();

2:Activity获取Fragment对象

这里可以通过Id或者Tag来从Activity获取Fragment内的对象(大部分是控件)。关于id无需多言,这里提一下后者,后者的Tag值可以在xml布局里面设置其Tag值,然而那是针对于静态使用Fragment;对于动态加载Fragment而言,,这种方式就行不通,但可以通过FragmentManagerTransaction.replace()方法的一个重载方法来实现,该方法传入的第三个值即为我们自定义传入的tag。还有一点是需要注意的是,由于现在大于5.0版本的设备已经超越95%,无需考虑向下兼容问题,建议不要使用getFragmentManager(),而是使用getSupportFragmentManager()

getSupportFragmentManager().findFragmentById(R.layout.fragment_test).getView().findViewById(R.id.button_test);

或者

getSupportFragmentManager().findFragmentByTag("TAG").getView().findViewById(R.id.button_test);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值