我发现Fragment #setRetainInstance(true)令人困惑.这是从Android Developer API中提取的Javadoc :
public void setRetainInstance(boolean retain)
控制是否在活动重新创建(例如从配置更改)中保留片段实例.这只能用于不在后栈中的片段.如果设置,则在重新创建活动时,片段生命周期会略有不同:
- onDestroy()不会被调用(但是onDetach()仍然会被调用,因为片段正在与其当前活动分离.
- 因为片段没有被重新创建,所以不会调用onCreate(Bundle).
- onAttach(活动)和onActivityCreated(捆绑)将仍然被调用.
问题:作为开发人员,您如何使用它,为什么它会使事情变得更容易?
我正在尝试使用Jack Wharton的ViewPager库(此处)创建一个应用程序,仅使用每个页面的图像(类似于Prixing(此处)主屏幕).一切正常,除了片段中的saveInstance.
在Jack Wharton的例子中,他将文本存储在名为mContent的String变量中,并在onCreate中恢复它,但在我的情况下,我该怎么办?保存/恢复位图?!任何客观的答案将不胜感激!
我对使用应用程序的Fragment很新,因为我看到的每一个例子,只展示了基础知识,而且对于更复杂的问题,它变得越来越困难.
PS.如果有用的知道,我正在使用CirclePageIndicator.
目前的片段代码:
public final class SpecialOfferFragment extends Fragment {
private int imageResourceId;
public static SpecialOfferFragment newInstance(int i) {
//probably I'll use a bitmap(downloaded) as parameter instead of using static images
SpecialOfferFragment fragment = new SpecialOfferFragment();
fragment.imageResourceId = i;
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// if ((savedInstanceState != null) { }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ImageView image = new ImageView(getActivity()); …Run Code Online (Sandbox Code Playgroud) 我知道人们已经提出了这个问题,但我遵循了所有的答案,我仍然遇到同样的问题.我有两个脚本一个是片段管理器(IngredientsActivity),另一个是片段(OtherList).代码如下
IngredientsActivity
import java.util.ArrayList;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class IngredientsActivity extends FragmentActivity implements ActionBar.TabListener {
private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.check_list);
// Set up the action bar.
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// For each of the sections in the app, add a tab to the action bar.
actionBar.addTab(actionBar.newTab().setText("Alcahol").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("Juice").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("Other").setTabListener(this)); …Run Code Online (Sandbox Code Playgroud)