如何保存活动视图并重新加载?

时间:2017-11-07 11:10:30

标签: java android android-activity

1我有三个activities,如A,B,C。 我转到activity A然后转到活动b。 我从活动A导航到活动B.

我想从活动B导航到活动A. 当我返回activity B时,它应该处于我离开的状态(填充视图)。 我在两个活动中都接受了用户输入并希望保存它

activity A

3 个答案:

答案 0 :(得分:0)

用于存储您的活动视图您需要override onSaveInstanceState(Bundle savedInstanceState)并将要更改的应用程序状态值写入Bundle参数。

Have look this

快乐的编码!!

答案 1 :(得分:0)

在我看来,通过Fragments with Viewpagers而不是活动控制这些屏幕会派上用场。但是,如果您仍然需要活动,您可以使用捆绑包或将这些实体保留在您的应用程序上下文中,这是活动中的共同背景(我不建议)

答案 2 :(得分:0)

一旦您从一个活动转移到另一个活动,如果您从后面的堆栈导航而不是通过Intent,则编辑的字段将可用。

示例

Back Stack - >按下后退按钮,它将调用您之前的活动。

意图 - > startActivity(new Intent(ActivityA.this,ActivityB.class));

如果您使用intent更改活动,它将重新创建活动,以便编辑的字段不可用..

到目前为止,如果您想在用户回来后存储字段,则需要使用共享首选项..

Refer the official documentation

我可以给你一个样本来将值存储在共享首选项中并从中检索。

public class CommonUtil {

public static void setUserName(String userName,Context context){
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("user_name",userName);
    editor.apply();
}

public static String getUserName(Context context){
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    return sharedPreferences.getString("user_name",null);
}}

设置值表格活动

 CommonUtil.setUserName("user",getApplicationContext());
 CommonUtil.getUserName(getApplicationContext());

一旦用户离开,我将更新文本字段中的值

更新CommonUtil方法..

其中密钥将是用户名,密码

其中的值将取自textfields

public static void setValues(String key,String value, Context context){
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    final SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.remove(key);
    editor.putString(key,value);
    editor.apply();
}

public static String getValues(String key,Context context){
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    return sharedPreferences.getString(key,null);
}

如果您更喜欢循环,也可以

解决问题的最终解决方案..

final EditText username,surname,middlename,dob,email,password;
    Button get,save;

    final String[] keyset = new String[]{"username","surname","middlename","dob","email","password"};

    username = (EditText) findViewById(R.id.username);
    surname = (EditText) findViewById(R.id.surname);
    middlename = (EditText) findViewById(R.id.middlename);
    dob = (EditText) findViewById(R.id.dob);
    email = (EditText) findViewById(R.id.email);
    password = (EditText) findViewById(R.id.password);

    final EditText[] editTexts = {username,surname,middlename,dob,email,password};

    get = (Button) findViewById(R.id.get);
    save = (Button) findViewById(R.id.save);

    save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            for (int i =0 ; i<6 ;i++){

                CommonUtil.setValues(keyset[i],editTexts[i].getText().toString(),getApplicationContext());

                Log.d("got",editTexts[i].getText().toString());
            }
        }
    });

    get.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            for (int i =0 ; i<6 ;i++){
                CommonUtil.getValues(keyset[i],getApplicationContext());

                Log.d("got",CommonUtil.getValues(keyset[i],getApplicationContext()));
            }
        }
    });