[英]How to pass data from an Activity to Tab Fragments using ViewPager?
嘿StackOverFlow社區! 我真的需要幫助.. :(
我現在搜索了2到3個小時,卻沒有找到任何相關且簡單的內容。
我解釋上下文:我有一個活動A1。 該活動包含3個片段F1,F2,F3。 它使用ViewPager,因此實際上是通過選擇選項卡或通過輕掃屏幕來選擇這3個片段,這是可行的。
我現在想做的事情:出於某些原因,我將Web服務稱為活動中的數據。 數據取決於活動A1從原始調用活動A0(這是一個group_id)獲取的意圖。 因此,我想將A1中從Web服務獲得的數據發送到我的每個片段F1,F2和F3。
您是否有解決方案或如何將數據傳遞到ViewPager中的片段的說明?
非常感謝!
我的活動A1有基本代碼:
public class ShowGroupActivity extends FragmentActivity implements ActionBar.TabListener { private ViewPager viewPager; private TabsPagerAdapter mAdapter; private ActionBar actionBar; // Tab titles private String[] tabs = { "Infos", "Parcours", "Mur" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_ACTION_BAR); setContentView(R.layout.activity_show_group); // Initilization viewPager = (ViewPager) findViewById(R.id.pager); actionBar = getActionBar(); mAdapter = new TabsPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(mAdapter); actionBar.setHomeButtonEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // Adding Tabs for (String tab_name : tabs) { actionBar.addTab(actionBar.newTab().setText(tab_name) .setTabListener(this)); } viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { // on changing the page // make respected tab selected actionBar.setSelectedNavigationItem(position); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { // on tab selected // show respected fragment view viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { }
這是片段的示例:F1(我想在其中顯示A1給定的一些數據)。
public class GroupInfoFragment extends Fragment { public GroupInfoFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_group_info, container, false); return v; } }
最簡單,最快的方法是使用EventBus 。 只需在活動中的onResponse方法上發布一個事件,該片段將處理其余的事件。
活動-
片段 -
您應該從片段中使用getActivity()
方法。
我建議在片段中聲明一個接口,如下所示:
public class GroupInfoFragment extends Fragment {
...
public interface Callbacks {
// you should declare methods for returning the data you want form your activity here
Foo getData();
}
...
}
然后在ShowGroupActivity
類中實現此接口,如下所示:
public class ShowGroupActivity extends FragmentActivity implements
ActionBar.TabListener, GroupInfoFragment.Callbacks {
...
@Override
Foo getData() {
return mData;
}
...
}
然后,您可以通過調用以下命令從片段類中獲取所需的數據:
GroupInfoFragment.Callbacks callbacks = (GroupInfoFragment.Callbacks) getActivity();
Foo data = callbacks.getData;
這樣,您可以實現您的片段類,而不必擔心活動的實現。
補充筆記
您還可以覆蓋片段的onAttach()
方法,以便始終保證片段被附加到實現Callback
接口的活動中。 您還可以保留對Callback
實例的引用:
Callbacks mCallbacks;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (!(activity instanceof Callbacks)) {
throw new ClassCastException("Activity must implement fragment's callbacks.");
}
mCallbacks = (Callbacks) activity;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.