一:传值
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);