这个主要说一下fragment与activity之间的数据交互,以及两个fragment之间的交互,其实跟我之前工作中总结的fragment知识差不多,这里就再复习一下,
- public class HeadlinesFragment extends ListFragment {
- OnHeadlineSelectedListener mCallback;
- // Container Activity must implement this interface
- public interface OnHeadlineSelectedListener {
- public void onArticleSelected(int position);
- }
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- // This makes sure that the container activity has implemented
- // the callback interface. If not, it throws an exception
- try {
- mCallback = (OnHeadlineSelectedListener) activity;
- } catch (ClassCastException e) {
- throw new ClassCastException(activity.toString()
- + " must implement OnHeadlineSelectedListener");
- }
- }
- ...
- }
- @Override
- public void onListItemClick(ListView l, View v, int position, long id) {
- // Send the event to the host activity
- mCallback.onArticleSelected(position);
- }
- public static class MainActivity extends Activity
- implements HeadlinesFragment.OnHeadlineSelectedListener{
- ...
- public void onArticleSelected(int position) {
- // The user selected the headline of an article from the HeadlinesFragment
- // Do something here to display that article
- }
- }
- public static class MainActivity extends Activity
- implements HeadlinesFragment.OnHeadlineSelectedListener{
- ...
- public void onArticleSelected(int position) {
- // The user selected the headline of an article from the HeadlinesFragment
- // Do something here to display that article
- ArticleFragment articleFrag = (ArticleFragment)
- getSupportFragmentManager().findFragmentById(R.id.article_fragment);
- if (articleFrag != null) {
- // If article frag is available, we're in two-pane layout...
- // Call a method in the ArticleFragment to update its content
- articleFrag.updateArticleView(position);
- } else {
- // Otherwise, we're in the one-pane layout and must swap frags...
- // Create fragment and give it an argument for the selected article
- ArticleFragment newFragment = new ArticleFragment();
- Bundle args = new Bundle();
- args.putInt(ArticleFragment.ARG_POSITION, position);
- newFragment.setArguments(args);
- FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
- // Replace whatever is in the fragment_container view with this fragment,
- // and add the transaction to the back stack so the user can navigate back
- transaction.replace(R.id.fragment_container, newFragment);
- transaction.addToBackStack(null);
- // Commit the transaction
- transaction.commit();
- }
- }
- }