检查已按下两个按钮中的哪一个,并将值传递给共享偏好

时间:2017-06-06 15:13:48

标签: java android button sharedpreferences

我有两个按钮的活动。这两个按钮都会带您进入下一个活动,同时为共享偏好提供一个值。我想在最后一次活动中访问此值。

  1. 如何查看按下了哪两个按钮?
  2. 我的代码中有什么问题?我总是得到相同的价值。所以我似乎总是按下相同的按钮,我不会这样做。
  3. 这是两个按钮所在的第一个活动:

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

3 个答案:

答案 0 :(得分:0)

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

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");

答案 1 :(得分:0)

我不确定你在活动中做了什么,但是如果你需要知道按下了按钮,你可以按照以下步骤操作:

给你的按钮听众添加:

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名称和值的String使用常量,以避免代码中的人为错误。 祝你好运!

答案 2 :(得分:0)

  

我的代码有什么问题?我总是得到相同的价值   结束。所以看起来我总是按下相同的按钮,我不会这样做。

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

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

并尝试从name sharedPreferences:

获取default的值
// Akt6
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

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

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

通过使用完全错误的不同KEY Name来获取价值。

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

如何查看按下了哪两个按钮?

<强> SOLUTION:

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

    更新您的代码,如下所示:

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

    希望这会有所帮助〜