0
我製作了一個帶有兩個選項卡的ActionBar - 一個用於片段和bfragment。片段包含一個按鈕。單擊片段上的按鈕將導致它更改爲cfragment。但是,再次單擊該選項卡會導致再次加載碎片。我能做些什麼來防止這種情況,主要是在標籤上說:「當有人點擊你時,加載最後一個片段狀態(在本例中爲cfragment)?」在Tab中保存片段狀態
這是我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:
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:
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);
fragmentTransaction.commit();
}
});
return view;
}
}
如何保存cfragment進入選項卡以這種方式單擊第一個選項卡不會導致再次加載片段?謝謝。
了'onTabSelected'的給我一個錯誤。你能澄清一下嗎? – Si8
你遇到什麼錯誤?你確定片段是一個實例變量嗎? – loadedion
我有兩個選項卡和一個選項卡有一些文本框來輸入數據,一旦我切換到另一個選項卡,並返回到原始選項卡的文本框失去其價值。這就是你要解決的問題? – Si8