Вопрос

Before I post, I tried to read many topics about restore app state and tried it but it does not solve my problem.

My Class is:

public class MainActivity extends ActionBarActivity
    implements NavigationDrawerFragment.NavigationDrawerCallbacks {

    private static boolean lv11 = true;

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mNavigationDrawerFragment = (NavigationDrawerFragment)
            getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
    mTitle = getTitle();

    // Set up the drawer.
    mNavigationDrawerFragment.setUp(
            R.id.navigation_drawer,
            (DrawerLayout) findViewById(R.id.drawer_layout));
}

@Override
public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments
    FragmentManager fragmentManager = getSupportFragmentManager();
    if(position == 0)
    {
        fragmentManager.beginTransaction()
                .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
                .commit();
    }
    else if(position == 1)
    {
        fragmentManager.beginTransaction()
                .replace(R.id.container, PlaceProfile.newInstance(position + 1))
                .commit();
    }
    else if(position == 2)
    {
        fragmentManager.beginTransaction()
                .replace(R.id.container, PlaceLogBook.newInstance(position + 1))
                .commit();
    }
    else if(position == 3)
    {
        fragmentManager.beginTransaction()
                .replace(R.id.container, PlaceBeverages.newInstance(position + 1))
                .commit();
    }
}
 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == RESULT_OK) {
        boolean finInfo = data.getBooleanExtra("Done", false);
        System.out.println("OnActivityResult = " + finInfo);
        if (finInfo == true) {
            readIt.setBackgroundColor(R.drawable.abc_ab_bottom_solid_light_holo);
            if (readIt.getText() == info1.getText()) {
                lv11 = false;
            }
        }
    }
}
public void onSectionAttached(int number) {
    switch (number) {
        case 1:
            mTitle = getString(R.string.title_section1);
            break;
        case 2:
            mTitle = getString(R.string.title_section2);
            break;
        case 3:
            mTitle = getString(R.string.title_section3);
            break;
        case 4:
            mTitle = getString(R.string.title_section4);
            break;
    }
}

public void restoreActionBar() {
    ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    actionBar.setDisplayShowTitleEnabled(true);
    actionBar.setTitle(mTitle);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (!mNavigationDrawerFragment.isDrawerOpen()) {
        // Only show items in the action bar relevant to this screen
        // if the drawer is not showing. Otherwise, let the drawer
        // decide what to show in the action bar.
        getMenuInflater().inflate(R.menu.main, menu);
        restoreActionBar();
        return true;
    }
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

public static class PlaceholderFragment extends Fragment {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    private static final String ARG_SECTION_NUMBER = "section_number";

    /**
     * Returns a new instance of this fragment for the given section
     * number.
     */
    public static PlaceholderFragment newInstance(int sectionNumber) {
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        InitializeItem();            
        if(savedInstanceState != null) {
            Log.v("","on Creat View");
            lv11 =  savedInstanceState.getBoolean("Level1");
            if (lv11 == false) {
                info1.setBackgroundColor(R.drawable.abc_ab_bottom_solid_light_holo);
            }
        }
          //where i create my view ...
         return rootView;
       }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {

        Log.v("TAG", "In frag's on save instance state ");
        savedInstanceState.putBoolean("Level1",false);
        super.onSaveInstanceState(savedInstanceState);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        ((MainActivity) activity).onSectionAttached(
                getArguments().getInt(ARG_SECTION_NUMBER));
    }
}

All are working fine but my problem is using onSaveInstantState() method.I used Log.v to check and it called when I press recent button on hardware then I kill it.After that when I run the app again my SaveInstantstate is null.In my case I want to change button color by check boolean that put parameter in save state and restore it back on onCreateView.

I want to know:

  1. what is wrong in my implementation and why I can't call restore my state
  2. How to implement it in the right way

*all code above are in the same class file

Thank you,and sorry for my grammar.

Это было полезно?

Решение

After you killed your application, all you Bundles are destroyed. The onSavedInstanceState() is used to protect state of app from being killed by the OS. In your case you need to save the state permanently. The "SharedPreferences" is ideal for that.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top