Android 将值从活动传递到CustomDialog类
您好,我想将通过活动中的SharedReferences保存的值“username”传递给CustomDialog类中的EditText。 这意味着我想在CustomDialog类中使用Android 将值从活动传递到CustomDialog类,android,dialog,sharedpreferences,android-edittext,Android,Dialog,Sharedpreferences,Android Edittext,您好,我想将通过活动中的SharedReferences保存的值“username”传递给CustomDialog类中的EditText。 这意味着我想在CustomDialog类中使用EditText.settext(用户名)。 有人能帮我做到这一点吗 多谢各位 主活动中的SharedReference代码: public class AndroidLogin extends Activity implements OnClickListener { public SharedPrefe
EditText.settext(用户名)
。
有人能帮我做到这一点吗
多谢各位
主活动中的SharedReference代码:
public class AndroidLogin extends Activity implements OnClickListener {
public SharedPreferences mPrefs;
...
@Override
protected void onPause() {
super.onPause();
Editor e = mPrefs.edit();
e.putString(USERNM, username);
e.commit();
}
}
public void createDialog(Context context) {
SharedPreferences prefs = context.getSharedPreferences("mPrefs", Context.MODE_PRIVATE);
String user = prefs.getString("USERNM", "");
new MyCustomForm(context, user, user, null); // where the class that is calling this is aa OnTextChangeListener
}
现在,我想将值“USERNM”设置为CustomDialog类中的EditText:
public class MyCustomForm extends Dialog {
public SharedPreferences mPrefs;
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(com.sencide.R.layout.inlogdialog);
EditText userTest = (EditText)findViewById(R.id.txtUserName);
mPrefs = getSharedPreferences("PREFS_NAME", this.MODE_PRIVATE); // does not work
String text = mPrefs.getString("USERNM", "");
userTest.setText(text);
}
}
自定义对话框:
import android.app.Dialog;
...
public class MyCustomForm extends Dialog {
String mTextChange;
public SharedPreferences mPrefs;
public interface ReadyListener {
public void ready(String user, String pass, boolean save);
}
private String usernm;
private String passwd;
private ReadyListener readyListener;
public MyCustomForm(Context context, String user, String pass, ReadyListener readyListener) {
super(context);
this.usernm = user;
this.passwd = pass;
this.readyListener = readyListener;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(com.sencide.R.layout.inlogdialog);
setTitle("Login:");
EditText userTest = (EditText)findViewById(R.id.txtUserName);
//mPrefs = getSharedPreferences("PREFS_NAME", this.MODE_PRIVATE);
//String text = mPrefs.getString("USERNM", "");
userTest.setText();
Button buttonConfrim = (Button) findViewById(R.id.btnConfirm);
buttonConfrim.setOnClickListener(new OKListener());
Button buttonCancel = (Button) findViewById(R.id.btnCancel);
buttonCancel.setOnClickListener(new CancelListener());
}
private class OKListener implements android.view.View.OnClickListener {
public void onClick(View v) {
EditText user = (EditText) findViewById(R.id.txtUserName);
EditText pass = (EditText) findViewById(R.id.txtpass);
CheckBox saveuser = (CheckBox) findViewById(R.id.saveuser);
readyListener.ready(user.getText().toString(),pass.getText().toString(), saveuser.isChecked());
MyCustomForm.this.dismiss();
}
}
private class CancelListener implements android.view.View.OnClickListener {
public void onClick(View v) {
MyCustomForm.this.dismiss();
}
}
}
在我的主要活动中编辑:
public class AndroidLogin extends Activity implements OnClickListener {
public SharedPreferences mPrefs;
...
@Override
protected void onPause() {
super.onPause();
Editor e = mPrefs.edit();
e.putString(USERNM, username);
e.commit();
}
}
public void createDialog(Context context) {
SharedPreferences prefs = context.getSharedPreferences("mPrefs", Context.MODE_PRIVATE);
String user = prefs.getString("USERNM", "");
new MyCustomForm(context, user, user, null); // where the class that is calling this is aa OnTextChangeListener
}
以下是我显示对话框的方式:
public void getLoginData() throws Exception {
if (checkInternetConnection() == true){
MyCustomForm dialog = new MyCustomForm (this, "", "", new OnReadyListener());
dialog.setContentView(R.layout.inlogdialog);
dialog.show();
}
这是为了传递上下文(并通过扩展视图)。我建议为对话框创建一个监听器,可能类似于OnTextChangedListener\onChange(String)
在活动中创建侦听器并将其传递给对话框。然后,当对话框完成时,调用监听器onChange(String)
方法,该方法将设置为向UI线程处理程序触发事件以更新编辑文本。相反,您可以传递处理程序
public class MyDialog exteds Dialog implements Dialog.OnClickListener {
OnTextChangeListener mListener;
String mTextChange;
public MyDialog(OnTextChangeListener listener) {
mListener = listener;
// set up your stuff
setOnClickListener(this);
}
...
public void onClick(DialogInterface dialog) {
// Do what ever you need to do to get set mTextChange
mListener.onChange(mTextChange);
}
public static interface OnTextChangeListener {
void onChange(String textChange);
}
以下是您如何通过它:
public void createDialog(Context context) {
SharedPreferences prefs = context.getSharedPreferences("MyPreferencesName", Context.MODE_PRIVATE);
String user = prefs.getString("what_ever_string_you_want", "fall_back_user_name");
new MyDialog(user, this); // where the class that is calling this is aa OnTextChangeListener
}
有什么问题?你能发布异常日志并清楚地说明问题所在吗?嗨,杰克,问题是值被保存了,没关系,但我不知道如何通过SharedReferences传递给类。从一个活动到另一个活动,我可以使用意图,但不能从一个活动到一个类。我在Dialog类中创建SharedReferences代码时遇到问题。您好,谢谢您的回答。我已经在活动中创建了一个listner,请参阅编辑的代码。您能帮我用一些示例代码将与SharedReferences一起保存的用户名值传递到Dialog.class吗?我刚接触安卓系统。@Lars,这就是我要做的。嗯,我做不到。这不能通过SharedReferences完成吗?因为我也通过SharedReferences保存了值。如果没有,谢谢你的帮助和努力。我不知道如何将SharedReferences中保存的USERNM值传递给CustomDialog,我将在CustomDialog中发布整个代码,也许你看到了一种方法?嗯,好的,代码是thx,但在我保存值后edittext保持为空。查看我编辑的代码。