2013-09-26 70 views
2

我在將sherlockframent中的TextView保存並恢復文本時出現問題,該問題作爲選項卡附加到操作欄中,當我旋轉屏幕時。我重寫的onPause()和onActivityCreated(捆綁savedInstanceState)梅託德在講座敬愛的代碼:在旋轉屏幕時將textview保存在一個片段中

@Override 
public void onPause() { 
     super.onPause(); 
     Bundle outState = new Bundle(); 
     String str = memoryText.getText().toString(); 
     outState.putCharSequence("app.multicalc.basiccalcfragment.save", str); 

     Log.v("saving", "text saved"); 

    } 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     if(savedInstanceState!=null){ 
      CharSequence str = savedInstanceState.getCharSequence("app.multicalc.basiccalcfragment.save"); 
     memoryText.setText(str); 
     savedInstanceState.keySet(); 
     Log.v("restoring", "text restored");}else Log.v("restoring","text not restored"); 

    } 

日誌說是文本保存,然後恢復,但在應用程序TextView的旋轉屏幕後清除。我在android編程方面還是個新手,所以也許我錯過了一些東西。 有人可以幫我嗎?

我累了使用setRetainInstance與假和真,但它沒有幫助。另外我onCreateView看起來像這樣:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) 
{ 
     View view = inflater.inflate(R.layout.basic_calculator, container, false);  

    setRetainInstance(true); 
     editText = (EditText) view.findViewById(R.id.txtInput); 
     memoryText = (TextView) view.findViewById(R.id.txtMemory); 

    //setting listeners for buttins from layout here 

     disableSoftInputFromAppearing(editText); 
     Log.v("basicCreate", "created basic"); 
     return view; 
} 

我不知道這是否是重要的,但我的MainActivity是:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    //setTheme(R.style.Sherlock___Theme_DarkActionBar); 
    setContentView(R.layout.activity_main); 
    actionBar = getSupportActionBar(); 
    super.onCreate(savedInstanceState); 
     getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     getSupportActionBar().setDisplayShowHomeEnabled(false); 
     getSupportActionBar().setDisplayShowTitleEnabled(false); 

     tab = actionBar.newTab().setTabListener(new MyTabListener<BasicCalcFragment>(this, "Basic",BasicCalcFragment.class)); 
     tab.setText("Basic"); 
     actionBar.addTab(tab); 
     tab = actionBar.newTab().setTabListener(new MyTabListener<ScientificCalcFragment>(this, "Scientific",ScientificCalcFragment.class)); 
     tab.setText("Scientific"); 
     actionBar.addTab(tab); 
     tab = actionBar.newTab().setTabListener(new MyTabListener<ConverterFragment>(this, "Converter",ConverterFragment.class)); 
     tab.setText("Converter"); 
     actionBar.addTab(tab); 
    if(savedInstanceState!=null){ 
     actionBar.setSelectedNavigationItem(savedInstanceState.getInt("tabState")); 
    } 


} 

一點改進解決了由於cYrixmorten響應;)

回答

0

這似乎是SherlockFragment的問題,或者至少很難找到解決方案。

幸運的是,你只是想保存和創建簡單的數據,所以我的建議是保存到sharedPreference:

在共享偏好保存串並檢索它在你的應用程序再次任何地方。

public class PreferencesData { 

    public static void saveString(Context context, String key, String value) { 
     SharedPreferences sharedPrefs = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     sharedPrefs.edit().putString(key, intValue).commit(); 
    } 

    public static int getString(Context context, String key) { 
     SharedPreferences sharedPrefs = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     return sharedPrefs.getString(key, defaultValue); 
    } 
} 

用法:

PreferencesData.saveString(context, "mynote", "Sherlock is weird"); 
// retrieve 
String note = PreferencesData.getString(context, "mynote"); 

使用此功能可以節省暫停串,並在onActivityCreated重新創建

希望這有助於

+0

更新我的回答 – cYrixmorten

+0

我在檢索字符串onActivityCreated –

0

你必須爲此使用overRed「onCreate」或「onCreateView」方法。

相關問題