2012-08-09 77 views
0

我的界面:自定义对话框构造

public interface LoginDialogDismissListener { 
    void loginDialogCancel(); 
    void loginDialogSuccess(); 
} 

我的活动:

public class MainActivity extends Activity implements LoginDialogDimissListener { 
    public void loginDialogCancel() { 
     //do stuff here  
    } 

    public void loginDialogSuccess() { 
     //do some other stuff here! 
    } 
} 

我一个LoginDialog:

public class LoginDialog extends Dialog implements OnClickListener, LoginChecker { 

    private ProgressBar pbLogin; 
    private TextView tvLoginstatus; 
    private Button cancel; 
    private Button save; 
    private EditText username; 
    private EditText password; 

    public LoginDialog(Context context) { 
     super(context); 
     setContentView(R.layout.login_dialog); 
     pbLogin = (ProgressBar) findViewById(R.id.progressBarLogin); 
     tvLoginstatus = (TextView) findViewById(R.id.dialogTvLoginstatus); 
     cancel = (Button) findViewById(R.id.bDialogCancel); 
     save = (Button) findViewById(R.id.bDialogSave); 
     username = (EditText) findViewById(R.id.dialogEtUsername); 
     password = (EditText) findViewById(R.id.dialogEtPassword); 

     setTitle("Brukerdata"); 
     pbLogin.setVisibility(View.INVISIBLE); 
     tvLoginstatus.setVisibility(View.INVISIBLE); 

     cancel.setOnClickListener(this); 
     save.setOnClickListener(this); 
     //setOnDismissListener(this); 
    } 

    public void onClick(View v) { 
     if (v.getId() == R.id.bDialogSave) { 
      saveClick(); 
     } 
     else if (v.getId() == R.id.bDialogCancel) { 
      cancelClick(); 
     } 
    } 

    private void saveClick() { 
     save.setEnabled(false); 
     String[] credentials = {username.getText().toString(), password.getText().toString()}; 
     pbLogin.setVisibility(View.VISIBLE); 
     CheckLoginTask logintask = new CheckLoginTask(this, credentials, 0); 
     logintask.execute(); 
    } 

    private void cancelClick() { 
     this.dismiss(); 
     //Here I want to call LoginDialogDismissListener.loginDialogCancel() 
    } 

    //Called from my AsyncTask (CheckLoginTask) 
    public void onLoginSuccess(int requestCode) { 
     this.dismiss(); 
     //Here I want to call LoginDialogDismissListener.loginDialogSuccess() 
    } 

    //Called from my AsyncTask (CheckLoginTask) 
    public void onLoginFail(int requestCode) { 
     pbLogin.setVisibility(View.INVISIBLE); 
     tvLoginstatus.setText("Feil brukernavn/passord ..."); 
     tvLoginstatus.setVisibility(View.VISIBLE); 
     save.setEnabled(true); 
    } 
} 

如果你在代码阅读我的意见,你看我想用我的界面实现的方法调用我的MainActivity。问题是,我无法弄清楚如何将我的活动一次发送到我的LoginDialog。

我的意思是,首先它需要上下文,第二我想提供它LoginDialogDismissListener(应该可能改变这个名字......),这是我的活动。

我觉得有一个更好的解决办法莫过于:

//Constructor 
public LoginDialog(Context context, LoginDialogDismissListener listener) { 
} 

//Activity creating the Dialog 
new LoginDialog(this, this); 

我试图定义构造函数只有LoginDialogDismissListener的说法,但我不能投,或以某种方式获取情况下,我需要我的super(context)

+0

从其他活动中使用此对话框 – Johannes 2012-08-09 11:07:20

回答

-1

不要使用“this”,请使用getApplicationContext()。从#Android的开发

+0

从我的对话框中无法访问该方法 – Johannes 2012-08-09 10:48:57

+0

不,我的意思是将它传递给新的LoginDialog(this,this)中的applicationContext()。 – Shark 2012-08-09 11:24:33

0

答案,可以实现我的接口家长活动,并已将所有活动扩展一遍。