2011-11-18 151 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