采用接口回調(diào)機(jī)制
在Fragment中定義接口
public interface FragmentListener{
void onFragment(Object object);
}
當(dāng)Fragment被加載到Activity的時(shí)候會(huì)被回調(diào)执庐,判斷宿主Activity是否實(shí)現(xiàn)了接口。
@Override
public void onAttach(Context context) {
super.onAttach(context);
if(context instanceof FragmentListener)
{
mFragmentListener = (FragmentListener)context;
}
else{
throw new IllegalArgumentException("Activity must implements FragmentListener");
}
}
傳值操作扬蕊,通過接口回調(diào)
mFragmentListener.onFragment("數(shù)據(jù)來自Fragment");
Activity實(shí)現(xiàn)接口回調(diào)方法治宣,并重寫回調(diào)方法。
@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("數(shù)據(jù)來自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創(chuàng)建以后
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());
}
}