【问题标题】:how to save configuration layout android如何保存配置布局android
【发布时间】:2012-09-01 16:04:03
【问题描述】:

我有一个从 xml 文件加载主布局的应用程序。

加载的布局是:

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

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

可以吗?

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

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

    您可以存储一个布尔值来跟踪布局的状态(无论是具有 5 个按钮的相对布局,还是具有 4 个按钮的视图选择状态)。这样当你加载activity时,你可以先检查这个标志来决定你要加载哪个布局。您也可以使用首选项,这样您就不需要初始化此标志变量,而是可以使用默认值。

    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;
           }
        }
    

    在按钮 A 的 OnClickListener 中:

    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() 方法可以类似地实现。

    编辑:更新为使用整数而不是布尔值

    【讨论】:

    • 问题不同,我有一个带有 5 个按钮的布局,如果用户单击按钮-a,则会出现一个菜单:例如选择 viewa/viewb/viewc,如果用户选择查看 a,按钮-a 开始不可见并出现视图 a。当应用程序重新启动时,我想加载带有 4 个按钮的布局并查看 a。我通过代码运行时在布局中插入按钮 A,所以我没有任何布局称为 clickedLayout
    • 您应该仍然能够应用我发布的答案背后的想法。您可以将其存储为整数,而不是将首选项使用/存储为布尔值。这个整数现在将表示单击了哪个按钮,或者视图的最后一个状态是什么。如果您将当前正在创建新布局的动态代码分解出来,则可以在检查此整数后在重载的 onCreate() 或 onResume() 中调用它。
    • 我可以用整数表示吗:0 代表默认按钮,1 视图 a,2 视图 b,3 视图 c ... 现在可以了吗?谢谢
    • 用户可以点击所有按钮,所以我必须保存5个整数好吗?
    • 是的,您很可能希望使用 6 个整数。 5 表示所有按钮,1 表示按下按钮之前的状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2016-05-07
    • 1970-01-01
    相关资源
    最近更新 更多