【发布时间】:2014-11-19 11:59:29
【问题描述】:
我仍在处理passing data between each fragment in a tab navigation app。最初我使用回调来设置和获取值,但这不能正常工作。我切换到当前的方法,即简单地调用 Activity 中的方法来设置和获取值,但这也很奇怪。
当我运行应用程序时,第一个片段(第一个选项卡)获取值,并且能够更改它。当我滑动到第二个选项卡时,该值不是应有的值。当我滑动到第三个选项卡时,该值是正确的。该值在第一个和第三个选项卡(片段)上是持久的,但第二个选项卡不想合作。
例子:
- 开始 - persistent_value = 0
- tab1 显示 - 值显示为 0
- 更改 tab1 上的值 - persistent_value = 9
- 滑动到 tab2 - 值显示为 0
- 滑动到 tab3 - 值显示为 9
- 更改 tab3 上的值 - persistent_value = 34
- 滑动到 tab2 - 值显示为 0
- 滑动到 tab1 - 值显示为 34
我不确定为什么第二个选项卡没有更新,而第一个和第三个选项卡都在更新。是我做错了什么,还是我不知道这里有什么?
这是我用来尝试解决问题的一些示例代码。
public class MainActivity extends Activity implements ActionBar.TabListener {
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
int persistent_value = 0;
public void setPersistentValue(int value) {
this. persistent_value = value;
}
public int getPersistentValue() {
return this.persistent_value;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager(), this);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
actionBar.addTab(
actionBar.newTab()
.setText(mSectionsPagerAdapter.getPageTitle(i))
.setTabListener(this));
}
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
mViewPager.setCurrentItem(tab.getPosition());
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
private Context context;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
public SectionsPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public int getCount() {
// Show 3 total pages.
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getResources().getString(R.string.tab_one_title);
case 1:
return getResources().getString(R.string.tab_two_title);
case 2:
return getResources().getString(R.string.tab_three_title);
}
return null;
}
}
public class MainFragment extends Fragment {
private static final String ARG_SECTION_TYPE = "section type";
int persistent_value;
public MainFragment(){}
public MainFragment(int sectionNumber) {
Bundle args = new Bundle();
args.putInt(ARG_SECTION_TYPE, sectionNumber);
setArguments(args);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
persistent_value = ((MainActivity)getActivity()).getPersistentValue;
TextView textView = (TextView) rootView.findViewById(R.id.the_value);
textView.setText(Integer.toString(this.persistent_value));
return rootView;
}
@Override
public void onPause() {
super.onPause();
((MainActivity)getActivity()).setPersistentValue(this.persistent_value);
}
@Override
public void onResume() {
super.onResume();
persistent_value = ((MainActivity)getActivity()).getPersistentValue;
View rootView = getView();
TextView textView = (TextView) rootView.findViewById(R.id.the_value);
textView.setText(Integer.toString(this.persistent_value));
}
}
}
【问题讨论】:
标签: android android-fragments tabs