采用接口回调机制
在Fragment中定义接口
public interface FragmentListener{
void onFragment(Object object);
}
当Fragment被加载到Activity的时候会被回调,判断宿主Activity是否实现了接口。
@Override
public void onAttach(Context context) {
super.onAttach(context);
if(context instanceof FragmentListener)
{
mFragmentListener = (FragmentListener)context;
}
else{
throw new IllegalArgumentException("Activity must implements FragmentListener");
}
}
传值操作,通过接口回调
mFragmentListener.onFragment("数据来自Fragment");
Activity实现接口回调方法,并重写回调方法。
@Override
public void onFragment(Object object){
button.setText(object.toString());
}
示例:
在Fragment中
public class RightFragment extends Fragment {
private FragmentListener mFragmentListener;
private String name;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
View view =inflater.inflate(R.layout.avtivity_time,container,false);
TextView textView = (TextView)view.findViewById(R.id.time_text);
if (getArguments() != null) {
name = getArguments().getString("MainActivity");
}
textView.setText(name);
mFragmentListener.onFragment("数据来自Fragment");
return view;
}
public interface FragmentListener{
void onFragment(Object object);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if(context instanceof FragmentListener)
{
mFragmentListener = (FragmentListener)context;
}
else{
throw new IllegalArgumentException("Activity must implements FragmentListener");
}
}
}
在Activity中
public class MainActivity extends AppCompatActivity implements RightFragment.FragmentListener {
private Button button;
private RightFragment rightFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button_1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rightFragment = new RightFragment();
Bundle args = new Bundle();
args.putString("MainActivity","Hello");
// setArguments方法必须在fragment创建以后
rightFragment.setArguments(args);
addFragment(rightFragment);
}
});
}
private void addFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.fragment_contain,fragment);
transaction.commit();
}
@Override
public void onFragment(Object object){
button.setText(object.toString());
}
}