2011-11-18 109 views
0

嗨,我想通过我的活动中的SharedPreferences保存的值“用户名”传递给CustomDialog类中的EditText。 含义我想在我的CustomDialog类中使用EditText.settext (username)。 有人可以帮助我实现这个目标吗?将活动的值传递给CustomDialog类

谢谢。在主要业务

SharedPreference代码:

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

现在我想设置的值 “USERNM” 的EditText上我CustomDialog类:

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

CustomDialog:

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 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();  
    } 
+0

问题是什么?你能发布异常日志并清楚说明问题出在哪里吗? – Jack

+0

嗨杰克, 问题是值得到保存,没关系,但我不知道如何通过SharedPreferences传递给一个类。 从活动到活动,我可以使用意图,但不是从活动到课堂。 我在创建Dialog类中的SharedPreferences代码时遇到了问题。 – Lars

回答

1

这是not recommended左右(通过扩展视图)通过上下文。我建议为你的对话创建一个监听器,可能类似于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 
    } 
+0

嗨AedonEtLIRA, 谢谢你回答我已经在活动中做了一个listner,请参阅编辑的代码。 你能帮我用一些示例代码将用SharedPreferences保存的用户名值传递给Dialog.class? 我刚刚退出Android。 – Lars

+0

@Lars简而言之,我会做什么。 – AedonEtLIRA

+0

嗯,我无法完成它。 这不能通过SharedPreferences?来完成,因为我也通过SharedPreferences保存了值。 无论如何,如果不是你的帮助和努力的话。 – Lars