保存选项卡内的片段状态

编程入门 行业动态 更新时间:2024-10-28 20:18:11
本文介绍了保存选项卡内的片段状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我做了个动作条有两个选项卡 - 一个用于afragment和bfragment。 afragment包含一个按钮。点击afragment按钮,将导致其改为cfragment。但是,单击选项卡再次结果afragment被再次加载。我可以做prevent这算什么,基本上到标签,说:当有人点击你,加载最后一个片段的状态(在这种情况下,cfragment)?

I made an ActionBar with two tabs - one for afragment and bfragment. afragment contains a button. Clicking the button on afragment will result it to change to cfragment. However, clicking the tab again results to afragment being loaded again. What can I do to prevent this, to essentially say to the tab, "When somebody clicks on you, load the last fragment state (in this case, cfragment)?"

这是我的MainActivity.java:

This is my MainActivity.java:

public class MainActivity extends Activity { public static Context appContext; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); appContext = getApplicationContext(); //ActionBar ActionBar actionbar = getActionBar(); actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ActionBar.Tab PlayerTab = actionbar.newTab().setText("Fragment A"); ActionBar.Tab StationsTab = actionbar.newTab().setText("Fragment B"); Fragment PlayerFragment = new AFragment(); Fragment StationsFragment = new BFragment(); PlayerTab.setTabListener(new MyTabsListener(PlayerFragment)); StationsTab.setTabListener(new MyTabsListener(StationsFragment)); actionbar.addTab(PlayerTab); actionbar.addTab(StationsTab); }

我TabListener:

My TabListener:

class MyTabsListener implements ActionBar.TabListener { public Fragment fragment; public MyTabsListener(Fragment fragment) { this.fragment = fragment; } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { Toast.makeText(MainActivity.appContext, "Reselected!", Toast.LENGTH_LONG).show(); } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { ft.replace(R.id.fragment_container, fragment); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { ft.remove(fragment); } }

最后,我AFragment.java:

And finally, my AFragment.java:

public class AFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.afragment, container, false); Button mButton = (Button) view.findViewById(R.id.button1); mButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); CFragment fragment = new CFragment(); fragmentTransaction.replace(R.id.fragment_container, fragment); fragmentTransactionmit(); } }); return view; } }

我如何保存cfragment到标签以这样一种方式,点击第一个选项卡将不会导致再次afragment加载?谢谢你。

How do I save cfragment into the tab in such a way that clicking the first tab would not result to afragment loading again? Thank you.

推荐答案

的状态不会被保存,因为你每次更换标签时添加一个新的片段。

The state is not being saved because you are adding a new fragment every time you change tabs.

在'onTabUnselected`,不要删除,但分离/隐藏

In 'onTabUnselected`, don't remove, but detach/hide

public void onTabUnselected(Tab tab, FragmentTransaction ft) { if (fragment != null) { ft.detach(fragment); } }

而在 onTabSelected ,请检查是否片段,而不是已经存在的替换

And in onTabSelected, check to see if the fragment exists already instead of replacing

public void onTabSelected(Tab tab, FragmentTransaction ft) { fragment = mActivity.getSupportFragmentManager().findFragmentByTag(tag); if( fragment == null ) { fragment = Fragment.instantiate(mActivity, mClass.getName()); ft.add(R.id.fragment_container, fragment, tag); } else { ft.attach(fragment); } }

更多推荐

保存选项卡内的片段状态

本文发布于:2023-10-12 21:49:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1485995.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:选项卡   片段   状态

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!