m r sh m r sh - 4 months ago 15
Android Question

how to save state with onSaveInstanceState and onRestoreInstanceState while orientation change

I read almost all article about onSaveInstanceState and onRestoreInstanceState in Stack overflow but I cant solve my problem.

I have a text view and button in my main.java and while you click on button value of a ( a is an int variable) variable will increase and show in the text view, but, when I rotate my phone ( orientation change), text view reset.

I override onSaveInstanceState and onRestoreInstanceState but it doesn't work.
one more thing, I have special layout-land.xml file for landscape view.

here is my code

import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class main extends Activity {
/** Called when the activity is first created. */
public int a = 0;
public String fonts="TAHOMA.TTF";

TextView tv = (TextView) findViewById(R.id.salavat);
Button b = (Button) findViewById(R.id.showsalavat);

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b.setOnClickListener(new Button.OnClickListener() {
public void onClick(View arg0) {
a++;
tv.setText(""+a);
}
});
}
@Override
protected void onSaveInstanceState(Bundle SavedInstanceState) {
super.onSaveInstanceState(SavedInstanceState);
SavedInstanceState.putInt("salavat-count", a);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
a= savedInstanceState.getInt ("salavat-count");
}
}


and here my main.xml







<TextView
android:id="@+id/shoma"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right"
android:text="@string/shoma"
android:textSize="20sp" />

<Button
android:id="@+id/showsalavat"
android:layout_width="fill_parent"
android:layout_height="150dp"
android:text="+"
android:textSize="100sp" />

<TextView
android:id="@+id/eltemas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="55dp"
android:text="@string/eltemas" />

<TextView
android:id="@+id/salavat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="35sp" />

<TextView
android:id="@+id/ferestade"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:text="@string/salavat"
android:textSize="20sp" />

</LinearLayout>



I really need some help on this.
I really appreciate your help.

Answer

I think this code is helpful for you..

public class MainActivity extends Activity 
{

    protected void onSaveInstanceState(Bundle outState) 
    {
        super.onSaveInstanceState(outState);
        System.out.println("TAG, onSavedInstanceState");

        final TextView text = (TextView)findViewById(R.id.textView1);
        CharSequence userText = text.getText();
        outState.putCharSequence("savedText", userText);
    }
    protected void onRestoreInstanceState(Bundle savedState) 
    {       
        System.out.println("TAG, onRestoreInstanceState");
        final TextView text = (TextView)findViewById(R.id.textView1);
        CharSequence userText = savedState.getCharSequence("savedText");
        text.setText(userText);
    }
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final String name = "5";

        final TextView show = (TextView)findViewById(R.id.textView1);
        Button btn = (Button)findViewById(R.id.button1);
        btn.setOnClickListener(new View.OnClickListener() 
        {

            public void onClick(View v) 
            {
                // TODO Auto-generated method stub

                show.setText(name);

            }
        });
    }
}
Comments