Java 保存片段对象
我有一个活动,一次显示一个片段,现在每个片段都从服务器加载数据并在列表中不断获取数据,用户可以通过选择ActonBar中显示的微调器中的一个项目来显示活动中的另一个片段 这是活动的代码Java 保存片段对象,java,android,fragment,Java,Android,Fragment,我有一个活动,一次显示一个片段,现在每个片段都从服务器加载数据并在列表中不断获取数据,用户可以通过选择ActonBar中显示的微调器中的一个项目来显示活动中的另一个片段 这是活动的代码 public class HomeActivity extends SherlockFragmentActivity .....{ private class ListInfo { private String tag; private Cl
public class HomeActivity extends SherlockFragmentActivity .....{
private class ListInfo {
private String tag;
private Class<?> clss;
private Bundle bundle;
private Fragment fragment;
public ListInfo(String tag, Class<?> clss, Bundle bundle) {
this.tag = tag;
this.clss = clss;
this.bundle = bundle;
}
}
String[] naviStrings;
private HashMap<String, ListInfo> listMap = new HashMap<String, HomeActivity.ListInfo>();
private ListInfo mLastListInfo = null;
private int currentSelectedOptionInSpinner;
ChannelFragment fr;
@SuppressWarnings("unchecked")
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
Log.d("HomeActivity", "onCreate");
Log.d("onCreate bundle", "" + arg0);
setContentView(R.layout.test);
naviStrings = getResources().getStringArray(
R.array.action_bar_spinner_entries);
initializeList(arg0);
Context context = getSupportActionBar().getThemedContext();
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
context, R.array.action_bar_spinner_entries,
R.layout.sherlock_spinner_item);
adapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
getSupportActionBar().setListNavigationCallbacks(adapter, this);
getSupportActionBar().setSelectedNavigationItem(
currentSelectedOptionInSpinner);
}
private void initializeList(Bundle args) {
ListInfo listInfo = null;
// add first Fragment
listMap.put(naviStrings[5], (listInfo = new ListInfo(naviStrings[5],
AboutUsActivity.class, args)));
addFragmentToList(this, listInfo);
listMap.put(naviStrings[3], (listInfo = new ListInfo(naviStrings[3],
Fragment1.class, args)));
addFragmentToList(this, listInfo);
listMap.put(naviStrings[2], (listInfo = new ListInfo(naviStrings[2],
Fragment2.class, args)));
addFragmentToList(this, listInfo);
listMap.put(naviStrings[1], (listInfo = new ListInfo(naviStrings[1],
Fragment3.class, args)));
addFragmentToList(this, listInfo);
listMap.put(naviStrings[4], (listInfo = new ListInfo(naviStrings[4],
Fragment4.class, args)));
addFragmentToList(this, listInfo);
if (args != null) {
Toast.makeText(this, "args is not null", Toast.LENGTH_SHORT).show();
// set the current selected index in the ActionBar spinner
if (args.getInt(
ApplicationMetaData.IntentData.LAST_SELECTED_ITEM_SPINNER,
-1) > -1
&& args.getInt(
ApplicationMetaData.IntentData.LAST_SELECTED_ITEM_SPINNER,
-1) < naviStrings.length) {
Toast.makeText(this, "selected is not null",
Toast.LENGTH_SHORT).show();
currentSelectedOptionInSpinner = args
.getInt(ApplicationMetaData.IntentData.LAST_SELECTED_ITEM_SPINNER);
} else {
currentSelectedOptionInSpinner = 2;
}
} else {
currentSelectedOptionInSpinner = 2;
}
onNavigationItemSelected(currentSelectedOptionInSpinner, 0);
}
private static void addFragmentToList(SherlockFragmentActivity activity,
ListInfo instanse) {
// check to see if we already have a fragment for this tab , probably
// from a previously save state.
// if so deactivated it ,because our initial state is that a tab is not
// shown.
String tag = instanse.tag;
instanse.fragment = activity.getSupportFragmentManager()
.findFragmentByTag(tag);
if (instanse.fragment != null && !instanse.fragment.isDetached()) {
FragmentTransaction ft = activity.getSupportFragmentManager()
.beginTransaction();
ft.detach(instanse.fragment);
ft.commit();
activity.getSupportFragmentManager().executePendingTransactions();
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(
ApplicationMetaData.IntentData.LAST_SELECTED_ITEM_SPINNER,
currentSelectedOptionInSpinner);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
Log.d("onNavigationItemSelected", "" + itemPosition);
if (itemPosition == 5) {
Intent i = new Intent(this, AboutUsActivity.class);
startActivity(i);
return true;
}
Log.d("fragment data", listMap.get(naviStrings[itemPosition]) + "");
ListInfo newtItem = listMap.get(naviStrings[itemPosition]);
if (newtItem != mLastListInfo) {
FragmentTransaction ft = this.getSupportFragmentManager()
.beginTransaction();
if (mLastListInfo != null) {
if (mLastListInfo.fragment != null) {
ft.detach(mLastListInfo.fragment);
}
}
if (newtItem != null) {
if (newtItem.fragment == null) {
// create and add
newtItem.fragment = Fragment.instantiate(this,
newtItem.clss.getName(), newtItem.bundle);
ft.add(android.R.id.content, newtItem.fragment,
newtItem.tag);
} else {
ft.attach(newtItem.fragment);
}
}
mLastListInfo = newtItem;
ft.commit();
this.getSupportFragmentManager().executePendingTransactions();
return true;
}
return false;
}}
公共类HomeActivity扩展了SherlockFragmentActivity{
私有类ListInfo{
私有字符串标签;
私家级CLS;
私有包;
私有片段;
公共ListInfo(字符串标记、类clss、包){
this.tag=tag;
this.clss=clss;
this.bundle=bundle;
}
}
字符串[]导航字符串;
私有HashMap listMap=新HashMap();
私有ListInfo mLastListInfo=null;
private int current selectedoptioninspinner;
通道片段fr;
@抑制警告(“未选中”)
@凌驾
创建时受保护的void(包arg0){
super.onCreate(arg0);
Log.d(“HomeActivity”、“onCreate”);
Log.d(“onCreate bundle”,“arg0”);
setContentView(R.layout.test);
naviStrings=getResources().getStringArray(
R.array.action\u bar\u spinner\u条目);
初始化列表(arg0);
上下文上下文=getSupportActionBar().getThemedContext();
ArrayAdapter=ArrayAdapter.createFromResource(
上下文,R.array.action\u bar\u微调器\u条目,
R.布局。夏洛克旋转器(项目);
adapter.setDropDownViewResource(R.layout.sherlock\u微调器\u下拉菜单\u项);
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION\u MODE\u列表);
getSupportActionBar().setListNavigationCallbacks(适配器,this);
getSupportActionBar().setSelectedNavigationItem(
当前选择的选项(内部);
}
私有void初始值列表(Bundle args){
ListInfo ListInfo=null;
//添加第一个片段
put(naviStrings[5],(listInfo=newlistinfo(naviStrings[5],),
AboutUsActivity.class,args));
addFragmentToList(此为listInfo);
put(naviStrings[3],(listInfo=newlistinfo(naviStrings[3],),
片段(1.class,args));
addFragmentToList(此为listInfo);
put(naviStrings[2],(listInfo=newlistinfo(naviStrings[2],),
片段(2.class,args));
addFragmentToList(此为listInfo);
put(naviStrings[1],(listInfo=newlistinfo(naviStrings[1],),
片段(3.class,args));
addFragmentToList(此为listInfo);
put(naviStrings[4],(listInfo=newlistinfo(naviStrings[4],),
片段(4.class,args));
addFragmentToList(此为listInfo);
如果(args!=null){
Toast.makeText(这个“args不为null”,Toast.LENGTH_SHORT.show();
//在ActionBar微调器中设置当前选定的索引
如果(args.getInt)(
ApplicationMetaData.IntentData.LAST_SELECTED_ITEM_微调器,
-1) > -1
&&args.getInt(
ApplicationMetaData.IntentData.LAST_SELECTED_ITEM_微调器,
-1)
现在当我导航时