本文介紹了如何在Android中使用保存的實(shí)例狀態(tài)和恢復(fù)帶有微調(diào)的實(shí)例狀態(tài)?的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我的活動中有一個帶有選項(xiàng)列表的微調(diào)工具
當(dāng)用戶選擇一個選項(xiàng)時(shí),我使用OnItemSelected適配器來獲取所選選項(xiàng)的位置值,并在其中添加了一些If Else語句。If語句實(shí)際上從預(yù)定義的數(shù)據(jù)庫生成一個隨機(jī)字符串并顯示在TextView上。
現(xiàn)在我將切換回另一個練習(xí),并再次返回到此練習(xí)。現(xiàn)在的問題是,默認(rèn)情況下,微調(diào)控件的第一個選項(xiàng)僅處于選中狀態(tài),我需要使用用戶最后選擇的選項(xiàng)進(jìn)行更新,當(dāng)活動再次啟動時(shí),必須運(yùn)行該選項(xiàng)的功能。
我也做了一些搜索,發(fā)現(xiàn)可以使用onSaveInstanceState
和onRestoreInstanceState
NOW:
如何使用這兩個?應(yīng)該將它們放在哪里:onItemSelected(適配器)內(nèi)部還是外部?
如何將用戶選擇的新位置值更新(或存儲)為隨機(jī)生成的代碼?
為清楚起見,請檢查我的代碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_scheduledactivity);
/**displayed when the activity is launched (this should be
updated with the user selected option)**/
Resources res = getResources();
myString = res.getStringArray(R.array.normal);
String q = myString[rgenerator.nextInt(myString.length)];
TextView tv = (TextView) findViewById(R.id.text1);
tv.setText(q);
//initiating the spinner
Spinner s = (Spinner) findViewById( R.id.spinner);
s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (pos == 1){
//displayed on the time when user selects the option
Resources res = getResources();
myString = res.getStringArray(R.array.hardships);
String q = myString[rgenerator.nextInt(myString.length)];
TextView tv = (TextView) findViewById(R.id.text1);
tv.setText(q);
}
else {
//do nothing
}
編輯后的問題:
為了更清楚起見,我對問題進(jìn)行了編輯。基本上我想做的是,我想保存他們的用戶選擇的位置,與微調(diào)。當(dāng)用戶點(diǎn)擊”Thankyou”Button
時(shí),活動將結(jié)束,并在幾分鐘后由來自不同班級的廣播接收器呼叫開始。當(dāng)活動再次開始時(shí),用戶的最后一個選定選項(xiàng)(上一個活動)必須作為此活動中的默認(rèn)選項(xiàng)。
我認(rèn)為如果您查看代碼,問題出在保存和還原實(shí)例狀態(tài)。
請看我的代碼:
import java.util.Random;
import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class MyScheduledActivity extends Activity {
private String[] myString;
private static final Random rgenerator = new Random();
protected int mPos;
protected String mSelection;
String situation[] = {"Normal","Hardship","Sadness","Exam"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_scheduledactivity);
if (mPos == 0) {
Resources res = getResources();
myString = res.getStringArray(R.array.normal);
String q = myString[rgenerator.nextInt(myString.length)];
TextView tv = (TextView) findViewById(R.id.text1);
tv.setText(q);
}
//selection of the spinner
Spinner s = (Spinner) findViewById( R.id.spinner);
// Application of the Array to the Spinner
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, situation);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(spinnerArrayAdapter);
s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
MyScheduledActivity.this.mPos = pos;
MyScheduledActivity.this.mSelection = parent.getItemAtPosition(pos).toString();
//display toast
Toast.makeText(parent.getContext(), "The Situation is " +
parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
if (mPos == 0){
Resources res = getResources();
myString = res.getStringArray(R.array.hardships);
String q = myString[rgenerator.nextInt(myString.length)];
TextView tv = (TextView) findViewById(R.id.text1);
tv.setText(q);
}
if (mPos == 1){
Resources res = getResources();
myString = res.getStringArray(R.array.hardships);
String q = myString[rgenerator.nextInt(myString.length)];
TextView tv = (TextView) findViewById(R.id.text1);
tv.setText(q);
}
else {
//do nothing
}
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
//do something else
return;
}
});
//dismiss button - Thank You
Button buttonDismiss = (Button)findViewById(R.id.dismiss);
buttonDismiss.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
finish();
}});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putStringArray(mSelection, situation);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
situation = savedInstanceState.getStringArray("mSelection");
super.onRestoreInstanceState(savedInstanceState);
}
}
This is how the activity looks
推薦答案
在當(dāng)前活動中,重寫名為onSaveInstanceState()
的方法,并將數(shù)據(jù)放入包中。
并覆蓋另一個方法onRestoreInstanceState()
并從包中獲取這些值…
這篇關(guān)于如何在Android中使用保存的實(shí)例狀態(tài)和恢復(fù)帶有微調(diào)的實(shí)例狀態(tài)?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,