【问题标题】:Check which one of two buttons has been pressed and pass a value to sharedpreferences检查两个按钮中的哪一个被按下并将一个值传递给 sharedpreferences
【发布时间】:2017-06-06 15:13:47
【问题描述】:

我有一个带有两个按钮的活动。这两个按钮将您带到下一个活动,同时为 sharedpreferences 赋予一个值。我想在我最后的活动中访问这个值。

  1. 如何检查两个按钮中的哪一个被按下?
  2. 我的代码有什么问题?最后我总是得到相同的值。所以我似乎总是按同一个按钮,但我没有。

这是两个按钮所在的第一个活动:

public void imagebutton (){
        
        ImageButton btn = (ImageButton) findViewById(R.id.imageButton3);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(Akt1.this);
                SharedPreferences.Editor editor = preferences.edit();
                editor.putString("name2", "Geschlecht");

                editor.clear();
                editor.apply();
                startActivity(new Intent(Akt1.this, Akt2.class));
            }
        });
    }

               //buttonclick mit datapass gemixt

    private void imagebutton1 () {
        ImageButton btn = (ImageButton) findViewById(R.id.imageButton4);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                SharedPreferences preferences = getSharedPreferences("myprefs", MODE_PRIVATE);
                SharedPreferences.Editor editor = preferences.edit();
                editor.putString("name","Geschlecht");
                editor.commit();

                Intent intent = new Intent (Akt1.this,Akt2.class);
                startActivity(intent);

这里是最后一个活动的代码,我想访问从 buttonclick 传递给 sharedpreferences 的值:

public class Akt6 extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Hiermit Layout mit Activity verbinden
        setContentView(R.layout.activity_akt6);



        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        String name = preferences.getString("Name",null);
        name ="Männlich";

        SharedPreferences preferences2 = PreferenceManager.getDefaultSharedPreferences(this);
        String name2 = preferences.getString("Name", "default");
        name2 ="Weiblich";
        //zeige Wert on screen

        TextView textView19 = (TextView) findViewById(R.id.textView19);
        textView19.setText(name);

【问题讨论】:

标签: java android button sharedpreferences


【解决方案1】:

因为这个,你得到了相同的价值:

String name = preferences.getString("Name", null);
...
String name2 = preferences.getString("Name", "default");

您使用的是同一个键“名称”。您使用键“name”和“name2”存储了值。 因此,如果您想获得这些值,您需要编写如下内容:

String name = preferences.getString("name", null);
...
String name2 = preferences.getString("name2", "default");

此外,您始终存储相同的值“Geschlecht”:

editor.putString("name2", "Geschlecht");
editor.putString("name","Geschlecht");

【讨论】:

  • 好的,我进行了更改,但在我访问数据的最后一个活动中,无论我按下什么按钮,我仍然只能得到“Männlich”。
【解决方案2】:

我不确定你在做什么,但如果你想知道按下了哪个按钮,你可以执行以下操作:

向您的按钮侦听器添加以下内容:

public void imagebutton (){

    ...
    editor.putString("name2", "Geschlecht");
    editor.putString("ButtonPressed","Button1"); // This is the new line
    ...
}

...

public void imagebutton1 (){

    ...
    editor.putString("name2", "Geschlecht");
    editor.putString("ButtonPressed","Button2"); // This is the new line
    ...
}

然后,要获取活动中按下的按钮的值,请执行以下操作:

...
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String button = preferences.getString("ButtonPressed","");
if(!button.isEmpty()){
    switch(button){
        case "Button":
            //You have pressed the first button
            break;
        case "Button2":
            //You have pressed the second button
            break;
    }
}

您应该为作为 sharedpref 名称和值传递的每个字符串使用常量,以避免代码中的人为错误。 祝你好运!

【讨论】:

  • 对不起,你不明白我的问题。我有两个按钮:1. 男性和 2. 女性。如果例如男性被按下我想在应用程序“男性”的最后一个活动中显示。
  • 好吧,将“Button”替换为“Male”,将“Button2”替换为“Female”,你就明白了
【解决方案3】:

我的代码有什么问题?我总是在 结尾。所以看起来我总是按同一个按钮,而我没有。

1. 在您的方法imagebutton1() 中,您将name 的值存储到不同的sharedPreferences (myprefs) 中:

// Akt1
SharedPreferences preferences = getSharedPreferences("myprefs", MODE_PRIVATE);

并试图从default sharedPreferences 中获取name 的值:

// Akt6
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

2.您已使用 KEY name 存储价值:

 // Akt1
editor.putString("name","Geschlecht"); 

并通过使用不同的 KEY Name 来获得价值,这是完全错误的。

// Akt6
String name = preferences.getString("Name", null);

如何检查两个按钮中的哪一个被按下?

解决方案:

  1. 使用相同的SharedPreferences 来存储和检索值。
  2. 使用相同的 KEY "name"SharedPreferences 存储和检索 name 的值

更新您的代码如下:

Akt1.java

public void imageButton (){

    ImageButton btn = (ImageButton) findViewById(R.id.imageButton3);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(Akt1.this);
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString("name", "Male");
            editor.commit();

            startActivity(new Intent(Akt1.this, Akt2.class));
        }
    });
}

private void imageButton1 () {
    ImageButton btn = (ImageButton) findViewById(R.id.imageButton4);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(Akt1.this);
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString("name", "Female");
            editor.commit();

            startActivity(new Intent(Akt1.this, Akt2.class));
        }
    });
}

Akt6.java

public class Akt6 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_akt6);

        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        String name = preferences.getString("name", "default");

        TextView textView19 = (TextView) findViewById(R.id.textView19);
        textView19.setText(name);
    }
}

希望对你有帮助~

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多