活动之间的共享首选项 [英] sharedpreferences between activities

查看:69
本文介绍了活动之间的共享首选项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题有点类似于其他sharedpreferences问题,但是我真的不知道如何在不同活动之间正确使用它?如果可能的话,请提供完整的活动文件,而不是仅仅几行代码,因为我是该领域的菜鸟!

This question is kind of similar to other sharedpreferences questions but i don't really know how exactly to use it between different activities? Kindly provide the complete activity file if possible rather than just few lines of codes as i am noob in this field!

我有两个活动.一个是用户配置文件,另一个是edituserprofile.用户在edituserprofile中所做的任何编辑,都应在用户单击edituserprofile的应用栏中的保存图像按钮后立即显示在userprofile活动中.sharedpreferences在edituserprofile中可以完美地工作,用户可以看到输入的数据,也可以将其更改为edittextview.但是,我无法将相同的逻辑应用于用户配置文件活动.当我单击edituserprofile中的save按钮时,它将带我进入userprofile,我可以看到对edituserprofile所做的更改,但是一旦退出并重新启动它,数据将在userprofile中清除,但不会从edituserprofile中清除!我希望用户配置文件保存,显示来自edituserprofile的数据,甚至用户退出并重新启动该应用程序!

I have two activities. one is userprofile and another is edituserprofile. Whatever a user edits in edituserprofile, should be displayed in userprofile activity as soon as user click on save image button from the app bar of edituserprofile. sharedpreferences works perfectly in edituserprofile where user can see entered data and also able to change it as it is edittextview. However, i am not able to apply the same logic to userprofile activity. When i click on save button from edituserprofile, it takes me to userprofile and i can see the change that has made in edituserprofile but as soon as i exit the userprofile and relaunch it, data gets cleared in userprofile but not from edituserprofile! i want userprofile to save, display data from edituserprofile even user exit and re-launch the app!

下面是用户个人资料活动!

Below is userprofile activity!

package com.example.android.coffeeshop6menus;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;


public class UserProfile extends AppCompatActivity {

    public static final int Edit_Profile = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_profile);
        Toolbar userProfileToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(userProfileToolbar);
        SharedPreferences sharedpreferences = getPreferences(MODE_PRIVATE);
        displayMessage(sharedpreferences.getString("nameKey", ""));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.userprofile_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_editProfile:
                Intent userProfileIntent = new Intent(UserProfile.this, EditUserProfile.class);
                startActivityForResult(userProfileIntent, Edit_Profile);
        }
        return true;
    }

    // Call Back method  to get the Message form other Activity

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case Edit_Profile:
                if (resultCode == RESULT_OK) {
                    String name = data.getStringExtra("");
                    displayMessage(name);
                }
                break;
        }
    }

    public void displayMessage(String message) {
        TextView usernameTextView = (TextView) findViewById(R.id.importProfile);
        usernameTextView.setText(message);
    }
}

下面是可完美运行的edituserprofile活动!

Below is edituserprofile activity that works perfect!

package com.example.android.coffeeshop6menus;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class EditUserProfile extends AppCompatActivity {

    private CoordinatorLayout coordinatorLayout;
    public static final String Name = "nameKey";
    SharedPreferences sharedpreferences;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit_user_profile);
        Toolbar userProfileToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(userProfileToolbar);
        TextView usernameTextView = (TextView) findViewById(R.id.username);
        sharedpreferences = getSharedPreferences(Name, Context.MODE_PRIVATE);
        if (sharedpreferences.contains(Name)) {
            usernameTextView.setText(sharedpreferences.getString(Name, ""));
        }
        coordinatorLayout = (CoordinatorLayout) findViewById(R.id
                .coordinatorLayout);

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.editprofile_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_save:
                TextView usernameTextView = (TextView) findViewById(R.id.username);
                String usernameString = usernameTextView.getText().toString();
                SharedPreferences.Editor editor = sharedpreferences.edit();
                editor.putString(Name, usernameString);
                editor.apply();
                Snackbar snackbar = Snackbar
                        .make(coordinatorLayout, "Saved!", Snackbar.LENGTH_LONG);

                snackbar.show();
                Intent userProfileIntent = new Intent(EditUserProfile.this, UserProfile.class);
                userProfileIntent.putExtra("", usernameString);
                setResult(RESULT_OK, userProfileIntent);
                finish();

        }
        return true;
    }


}

下面是userprofile.xml文件

Below is the userprofile.xml file

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout

        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.example.android.coffeeshop6menus.UserProfile">

        <include
            layout="@layout/toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            />


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="16dp"
            android:text="Name"
            android:textSize="20dp" />

        <TextView
            android:id="@+id/importProfile"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="16dp"
            android:text="@string/userNameImport"
            android:textSize="20dp" />





    </LinearLayout>

</ScrollView>

下面是edituserprofile xml文件:

Below is the edituserprofile xml file:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout

        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.example.android.coffeeshop6menus.UserProfile">

        <include
            layout="@layout/toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">


            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="16dp"
                android:text="User Profile"
                android:textSize="20dp" />


        </LinearLayout>


        <EditText
            android:id="@+id/username"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:cursorVisible="true"
            android:hint="@string/EditTextHint"
            android:inputType="textNoSuggestions" />

        <EditText
            android:id="@+id/usercontact"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:cursorVisible="true"
            android:hint="@string/usercontactHint"
            android:inputType="textNoSuggestions" />

        <EditText
            android:id="@+id/useremail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:cursorVisible="true"
            android:hint="@string/useremailHint"
            android:inputType="textEmailAddress" />


    </LinearLayout>

</ScrollView>

请帮助!

推荐答案

在您的 UserProfile 类中,其他所有地方都会发生变化-

In your UserProfile class and everywhere else change -

SharedPreferences sharedpreferences = getPreferences(MODE_PRIVATE);

SharedPreferences sharedpreferences = getPreferences(MODE_PRIVATE);

由此-

 sharedpreferences = getSharedPreferences("nameKey", Context.MODE_PRIVATE);

你很好走!

这篇关于活动之间的共享首选项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆