在旋转屏幕时将textview保存在一个片段中

问题描述:

我在将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响应;)

这似乎是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 –

你必须为此使用overRed“onCreate”或“onCreateView”方法。