Communication between Fragments in ViewPager

前端 未结 4 1067
天命终不由人
天命终不由人 2020-12-01 06:57

I\'m trying to do this: http://android-er.blogspot.com/2012/06/communication-between-fragments-in.html Except that I\'m using a FragmentStatePagerAdapter

I have an

4条回答
  •  悲&欢浪女
    2020-12-01 07:32

    Fragments have access to there parent Activity.
    Therefore the simplest approach is to register a callback in the parent Activity.

    Update: Submit cache added to MainActivity.

        public class MainActivity extends FragmentActivity {
    
            private OnButtonClicked mOnButtonClicked;
            private String mSubmitCache;
    
            public interface OnButtonClicked {
                void submit(final String s);
            }
    
            public void setOnButtonClicked(final OnButtonClicked c) {
                mOnButtonClicked = c;
                // deliver cached string, if any
                if (TextUtils.isEmpty(mSubmitCache) == false) {
                    c.submit(mSubmitCache);
                }
            }
    
            public void buttonClicked(final String s)  {
                if (mOnButtonClicked == null) {
                    // if FragmentB doesn't exist jet, cache value
                    mSubmitCache = s;
                    return;
                }
                mOnButtonClicked.submit(s);
            }
        }
    
        public class FragmentA extends Fragment implements OnClickListener {
    
            private MainActivity mMain;
            private Button mButton;
    
            @Override public onAttach(Activity a) {
                mMain = (MainActivity) a;
            }
    
            @Override public void onClick(View v) {
                mMain.buttonClicked("send this to FragmentB.");
            }
        }
    
        public class FragmentB extends Fragment implements MainActivity.OnButtonClicked {
    
            private MainActivity mMain;
            private TextView mTextView;
    
            // Called when the fragment's activity has been created
            // and this fragment's view hierarchy instantiated
            @Override public void onActivityCreated(Bundle savedState) {
                mMain = (MainActivity) getActivity();
                mMain.setOnButtonClicked(this);
            }
    
            @Override void submit(final String s) {
                mTextView.setText(s);
            }
        }
    

提交回复
热议问题