gpt4 book ai didi

Android Fragment,返回而不重新创建/重新加载 Fragment

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:21:06 26 4
gpt4 key购买 nike

我已经在 SO 上看到了很多关于 Fragments 的问题,但我似乎仍然无法弄清楚我想做的事情是否可行,而且如果我的设计模式存在缺陷并且我需要重新 -工作的整个过程。基本上,就像被问到的大多数问题一样,我有一个带有 NavigationTabs 的 ActionBar(使用 ActionBarSherlock),然后在每个 Tab 中有一个 FragementActivity,然后 FragmentActivities 在选择一行时推送新的 Fragments(我正在尝试重新创建Android 中的一个 iOS 项目,它只是一个基于导航的基本应用程序,带有一些可以深入了解特定信息的选项卡)。当我单击手机上的后退按钮时,会加载前一个 fragment ,但 fragment 会重新创建自身(因此会为每个 View 再次调用 WebServices)并且不需要这样做,因为信息不会在前一个 View 中更改时倒退。所以基本上我想弄清楚的是如何设置我的 Fragments,以便当我按下手机上的后退按钮时,上一个 Fragment 与之前已经创建的项目一起被拉出。以下是我当前的代码:

    //This is from my FragmentActivity Class that contains the ActionBar and Tab Selection Control
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
int selectedTab = tab.getPosition();

if (selectedTab == 0) {
SalesMainScreen salesScreen = new SalesMainScreen();
ft.replace(R.id.content, salesScreen);
}
else if (selectedTab == 1) {
ClientMainScreen clientScreen = new ClientMainScreen();
ft.replace(R.id.content, clientScreen);
}.....

//This is within the ClientMainScreen Fragment Class, which handles moving to the Detail Fragment
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Do something if Row is clicked
try{
String selectedClientName = clientObject.getString("ClientName");
String selectedClientID = clientObject.getString("ClientID");
String selectedValue = clientObject.getString("ClientValue");
transaction = getFragmentManager().beginTransaction();
ClientDetailScreen detailScreen = new ClientDetailScreen();
detailScreen.clientID = selectedClientID;
detailScreen.clientName = selectedClientName;
detailScreen.clientValue = selectedValue;
int currentID = ((ViewGroup)getView().getParent()).getId();
transaction.replace(currentID,detailScreen);
transaction.addToBackStack(null);
transaction.commit();

}
catch (Exception e) {
e.printStackTrace();
}
}
});....

//And then this is the Client Detail Fragment, with the method being called to Call the Web Service and create thew (since what is displayed on this screen is dependent on what is found in the Web Service
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved) {
return inflater.inflate(R.layout.clientdetailscreen, group, false);
}

@Override
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

//Setup Preferences File Link
this.preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());

//initialize the table object
mainTable = (TableLayout)getActivity().findViewById(R.id.mainTable);

//setup the detail table
setupRelatedClientSection();

}

然后,客户端详细信息屏幕可以使用与客户端主屏幕相同的方法再次向下钻取,但是当我从新屏幕返回到详细信息屏幕时,seuptRelatedClientSection() 方法会再次被调用,因此整个 fragment 当我真的只想调出那个屏幕的保存版本时重建。这可能与我当前的设置有关,还是我采用了错误的方式?

最佳答案

尝试使用 fragementTransaction.add 而不是 replace

关于Android Fragment,返回而不重新创建/重新加载 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13850506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com