我还在passing data between each fragment in a tab navigation app工作。最初我使用回调设置并获取值,但这并没有正常工作。我切换到简单调用Activity中的方法来设置和获取值的当前方法,但这也很奇怪。
当我运行应用程序时,第一个片段(第一个标签)获取值,并且能够更改它。当我滑动到第二个选项卡时,该值不是它应该的值。当我滑动到第三个选项卡时,值是正确的。该值在第一个和第三个选项卡(片段)上是持久的,但第二个选项卡不想合作。
示例:
我不确定为什么第二个标签没有更新,而第一个和第三个标签都是。我做错了什么,或者有什么我不知道的?
以下是我尝试解决问题的一些示例代码。
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));
}
}
}
答案 0 :(得分:0)
看来你的方式错了。
如果你需要在片段之间传递数据,你需要使用一个接口,而且你不会直接将数据从一个片段传递到另一个片段,而是将它首先传递给activity,然后传递给接收器片段< / p>
请参阅此链接以获取片段 - 片段通信
http://developer.android.com/training/basics/fragments/communicating.html