2012-09-01 33 views
2

我有一个应用程序,其中主布局从xml文件加载。如何保存配置布局android

装载布局是:

相对布局用5按钮。当用户点击按钮时出现一个菜单,他可以在其中选择一种视图。选择查看后,按钮将不可见并显示选定的视图。

重新启动应用程序后,系统加载默认布局(相对布局有5个按钮)。 我希望当应用程序重新启动系统加载最后选择的布局。

可以吗?

回答

2

您应该能够通过使用共享偏好在Android中做到这一点:http://developer.android.com/guide/topics/data/data-storage.html#pref

您可以存储一个布尔值跟踪布局的状态(无论是RelativeLayout的5个按钮,或查看选择状态与4个按钮)。通过这种方式,当您加载活动时,您可以首先检查此标志以确定要加载的布局。您也可以使用首选项,以便您不需要初始化此标志变量,而是可以使用默认值。

public class MyActivity extends Activity { 
    public static final String PREFS_NAME = "MyPrefsFile"; 
    public enum ViewState { 
     NO_CLICK, VIEW_A, VIEW_B, ... 
    }; 

    @Override 
    protected void onCreate(Bundle state){ 
     super.onCreate(state); 
     . . . 

     // Restore preferences 
     SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     int currentView = settings.getInt("viewClicked", NO_CLICK); 

     switch(currentView) 
     { 
      case VIEW_A: // Load the view if button A was clicked 
       loadViewA(); 
       break; 
      case VIEW_B: // Load the view if button B was clicked 
       loadViewB(); 
       break; 
      ... 
      case NO_CLICK: // Load the RelativeLayout with 5 Buttons 
      default: 
       loadDefaultView(); 
       break; 
     } 
    } 

而在你的OnClickListener的按钮A:

public void onClick(View v) { 

    ... 

    // Get the settings 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putInt("viewClicked", VIEW_A); 

    // Commit the edits! 
    editor.commit(); 

    // Load the view 
    loadViewA(); 
} 

为其他按钮的其他的onClick()方法也同样可以实现。

编辑:更新使用一个整数,而不是一个布尔

+0

的问题是不同的,我有一个布局5按钮,如果在用户点击按钮一个,出现一个菜单:例如选择viewa/viewb/viewc,如果用户选择视图a,则按钮-a开始不可见并出现视图a。当应用程序重新启动时,我想用4个按钮加载布局并查看。我通过代码运行时插入按钮A在布局中,所以我没有任何布局,称为clickedLayout – esoni

+0

你应该仍然能够应用我发布的答案背后的想法。您可以将其作为整数存储,而不是将首选项用作布尔值。此整数现在表示哪个按钮被点击,或者视图的最后状态是真实的。如果你计算出当前正在创建新布局的动态代码,那么在检查此整数后,可以在重载的onCreate()或onResume()中调用它。 –

+0

我可以用整数表示:默认按钮为0,1为视图a,2为视图b,3为视图c ...现在可以吗?谢谢 – esoni