2012-09-20 35 views
0
package com.example.shared; 

import android.app.Activity; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
Button bshared; 
TextView tv; 
String x; 
SharedPreferences pref; 
Editor edit; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    bshared = (Button) findViewById(R.id.bshared); 
    tv = (TextView) findViewById(R.id.tv); 

    tv.setText(x); 
    bshared.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
        pref=getApplicationContext().getSharedPreferences("details",1); 
      edit = pref.edit(); 
      edit.clear(); 
      edit.putString("name", "These are new values"); 
      edit.commit(); 
      x = pref.getString("name", ""); 

     } 
    }); 

} 
} 

当我点击按钮时,textview的值必须更改为'这些是新值',但这不会发生。有人能帮我找到我的错误吗?存储在共享偏好中的值未被反映

+0

这里发生了什么,新的值没有更新? – 2012-09-20 06:20:07

+0

是的新值不更新。如果我在onclick方法结束时设置了settext,则值会更新。但是,当我重新启动应用程序时,该值不会反映出来。共享首选一旦绑定就应该保持正确的值? – Anirudh

回答

2

在上单击方法,您必须设置值的TextView像下面的代码。

pref=getApplicationContext().getSharedPreferences("details",1); 
x = pref.getString("name", ""); 
tv.setText(x); 
bshared.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) 
     { 
      edit = pref.edit(); 
      edit.clear(); 
      edit.putString("name", "These are new values"); 
      edit.commit(); 
      x = pref.getString("name", ""); 
      tv.setText(x); 
     } 
    }); 
+0

你说的很好。但是,当我重新启动应用程序的价值不反映。共享首选一旦绑定就应该保持正确的值?您必须在onClick之前设置共享首选项值,因此需要使用 – Anirudh

+0

。看看我的代码。它设置先前存储的共享首选项值。 –

+0

这个效果很好,但是只要我点击它,价值并没有反映,最小化它一次后,它的更新,因为创建没有价值的字符串“名称” – Anirudh

2

textview正在设置文本,然后再更改文本。所以它不会反映在textview。在更改字符串的值后,将此行添加到最后的onclick方法。

tv.setText(x); 

编辑:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    bshared = (Button) findViewById(R.id.bshared); 
    tv = (TextView) findViewById(R.id.tv); 

    pref=getApplicationContext().getSharedPreferences("details",1); 
    x = pref.getString("name", ""); 

    tv.setText(x); 
    bshared.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      edit = pref.edit(); 
      edit.clear(); 
      edit.putString("name", "These are new values"); 
      edit.commit(); 
      x = pref.getString("name", ""); 
      tv.setText(x); 


     } 
    }); 

} 
} 
+0

你说的很好。但是,当我重新启动应用程序的价值不反映。共享首选一旦绑定就应该保持正确的值? – Anirudh

+0

雅,因为你的textview从x取值,在启动时它的值为null。您只在按钮单击时将值设置为x。请参阅我的编辑.. – Renjith

+0

此功能完美,但只要我点击一次,最小化一次后,它的值就不会反映,因为创建时没有值字符串“name” – Anirudh