工程源码:" />
当前位置: 代码迷 >> Android >> 工程源码:
  详细解决方案

工程源码:

热度:21   发布时间:2016-04-28 02:57:37.0
Android利用广播实现ViewPager中item之间的数据通信

当你在实现Fragment之间的通信时(例如Fragment_A和Fragment_B),可能会想到的方法是在Fragment_B中对外提供一个接口,然后在Fragment_A中去调用这个接口,并把这需要的参数传递过去。

下面我将对利用广播来实现从Fragment_A向Fragment_B传递数据。

主界面:

public class MainActivity extends FragmentActivity {    private int getLayoutResID() {        return R.layout.activity_main;    }        private MyViewPagerAdapter mAdapter = null;    private final int START_ITEM = 0;    private ViewPager mDataViewPager = null;        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        this.requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(getLayoutResID());                initEvent();    }    /**     * 初始化事件     */    private void initEvent() {        initView();    }        /**     * 初始化界面     */    private void initView() {        initWidgets();    }        /**     * 初始化控件     */    private void initWidgets() {        mDataViewPager = (ViewPager) findViewById(R.id.activity_main_show_viewpager);                mAdapter = new MyViewPagerAdapter(getSupportFragmentManager());        mAdapter.setContext(MainActivity.this);        mDataViewPager.setAdapter(mAdapter);        mDataViewPager.setCurrentItem(START_ITEM);    }}

适配器:

public class MyViewPagerAdapter extends FragmentStatePagerAdapter {	public static final int FRAGMENT_VIEWPAGER_PAGE_COUNT = 2;	private Context mContext;		public MyViewPagerAdapter(FragmentManager fm) {		super(fm);	}		public void setContext(Context context) {        mContext = context;    }	@Override	public Fragment getItem(int which) {		try {			switch (which) {			case 0:				return PageOneFragment.newInstance();			case 1:				return PageTwoFragment.newInstance();			default:				break;			}		} catch(Exception e) {		    e.printStackTrace();		}		return PageOneFragment.newInstance();	}		@Override	public int getCount() {		return FRAGMENT_VIEWPAGER_PAGE_COUNT;	}}

第一个Fragment:

public class PageOneFragment extends Fragment {	public static PageOneFragment newInstance() {		PageOneFragment fragment = new PageOneFragment();				return fragment;	}		private int getLayoutResID() {		return R.layout.fragment_page_0;	}		public static final String TAG = PageOneFragment.class.getName();	private TextView mShowTextView = null;	private Button mSendButton = null;		private static final int MESSAGE_UPDATEVIEW = 0x123;		private PageTwoDataChangedReceiver mReceiver = null;	public static final String DATA_CHANGED = "com.example.viewpager.communication.fragment.PAGE_ONE_DATA_CHANGED";		@Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,			Bundle savedInstanceState) {	    		View view = inflater.inflate(getLayoutResID(), container, false);				initEvent(view);				return view;	}		private void initEvent(View v) {		initView(v);				registerPageTwoDataChangedReceiver();	}		private void initView(View v) {		initWidgets(v);				setViewOnclickEvent();	}		private void initWidgets(View v) {	    mShowTextView = (TextView) v.findViewById(R.id.page_0_show_textview);	    mSendButton = (Button) v.findViewById(R.id.page_0_send_button);	}		/**	 * 对所有的按钮进行点击事件监听	 */	private void setViewOnclickEvent() {	    mSendButton.setOnClickListener(viewOnClickListener);	}		private OnClickListener viewOnClickListener = new OnClickListener() {				@Override		public void onClick(View v) {			switch (v.getId()) {			case R.id.page_0_send_button:			    Intent intent = new Intent();			    intent.setAction(PageTwoFragment.DATA_CHANGED);			    getActivity().sendBroadcast(intent);				break;			default:				break;			}		}	};		private void registerPageTwoDataChangedReceiver() {	    IntentFilter filter = new IntentFilter();	    try {            if (mReceiver != null) {                getActivity().unregisterReceiver(mReceiver);            }        } catch (Exception e) {            e.printStackTrace();        }	    	    mReceiver = new PageTwoDataChangedReceiver();	    filter.addAction(PageOneFragment.DATA_CHANGED);	    getActivity().registerReceiver(mReceiver, filter);	}		Handler handler = new Handler() {		public void handleMessage(Message msg) {			switch (msg.what) {			case MESSAGE_UPDATEVIEW:				updateView((String)msg.obj);				break;			default:				break;			}		};	};		private void updateView(String data) {	    mShowTextView.setText("从第二页发来的数据:" + data + " " + System.currentTimeMillis());	}		class PageTwoDataChangedReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            if (intent.getAction().equals(PageOneFragment.DATA_CHANGED)) {                String label = "TWO Time: ";                Message msg = new Message();                msg.what = MESSAGE_UPDATEVIEW;                msg.obj = label;                handler.sendMessage(msg);            }        }	}		@Override	public void onDestroy() {	    if (mReceiver != null) {            getActivity().unregisterReceiver(mReceiver);        }	    	    super.onDestroy();	}}

第二个Fragment:

public class PageTwoFragment extends Fragment {	public static PageTwoFragment newInstance() {		PageTwoFragment fragment = new PageTwoFragment();				return fragment;	}		private int getLayoutResID() {		return R.layout.fragment_page_1;	}		public static final String TAG = PageTwoFragment.class.getName();	private static final int MESSAGE_UPDATEVIEW = 0x123;	private TextView mShowTextView = null;    private Button mSendButton = null;		private PageOneDataChangedReceiver mReceiver = null;	public static final String DATA_CHANGED = "com.example.viewpager.communication.fragment.PAGE_TWO_DATA_CHANGED";		@Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,			Bundle savedInstanceState) {		View view = inflater.inflate(getLayoutResID(), container, false);				initEvent(view);				return view;	}		private void initEvent(View v) {		initView(v);				registerPageOneDataChangedReceiver();	}		private void initView(View v) {		initWidgets(v);				setViewOnclickEvent();	}		private void initWidgets(View v) {	    mShowTextView = (TextView) v.findViewById(R.id.page_1_show_textview);        mSendButton = (Button) v.findViewById(R.id.page_1_send_button);	}		/**	 * 对所有的按钮进行点击事件监听	 */	private void setViewOnclickEvent() {	    mSendButton.setOnClickListener(viewOnClickListener);	}		private OnClickListener viewOnClickListener = new OnClickListener() {				@Override		public void onClick(View v) {			switch (v.getId()) {			case R.id.page_1_send_button:			    Intent intent = new Intent();                intent.setAction(PageOneFragment.DATA_CHANGED);                getActivity().sendBroadcast(intent);				break;			default:				break;			}		}	};	    private void registerPageOneDataChangedReceiver() {        IntentFilter filter = new IntentFilter();        try {            if (mReceiver != null) {                getActivity().unregisterReceiver(mReceiver);            }        } catch (Exception e) {            e.printStackTrace();        }                mReceiver = new PageOneDataChangedReceiver();        filter.addAction(PageTwoFragment.DATA_CHANGED);        getActivity().registerReceiver(mReceiver, filter);    }    	Handler handler = new Handler() {		public void handleMessage(Message msg) {			switch (msg.what) {			case MESSAGE_UPDATEVIEW:				updateView((String)msg.obj);				break;			default:				break;			}		};	};		private void updateView(String data) {        mShowTextView.setText("从第一页发来的数据:" + data + " " + System.currentTimeMillis());    }	    class PageOneDataChangedReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            if (intent.getAction().equals(PageTwoFragment.DATA_CHANGED)) {                String label = "ONE Time: ";                Message msg = new Message();                msg.what = MESSAGE_UPDATEVIEW;                msg.obj = label;                handler.sendMessage(msg);            }        }    }	    @Override    public void onDestroy() {        if (mReceiver != null) {            getActivity().unregisterReceiver(mReceiver);        }                super.onDestroy();    }}

工程源码:

布局文件比较简单,这里不再给出。如下为项目源码。

http://download.csdn.net/detail/u013761665/8333283


笔者最新开发的应用连接

http://zhushou.360.cn/detail/index/soft_id/2419729?recrefer=SE_D_%E6%A3%B1%E9%95%9C

http://www.wandoujia.com/apps/com.mastershield.personalstat


  相关解决方案