0

OK、以下のスニペットのようなログインクラスがあります

public class LoginClass {

    public void login() {
        login.authorize(username,password); 
            //run activity specific code here
    }

}

このクラスは非常に一般的ですが、LoginClass.login()を呼び出すアクティビティに応じて、さまざまなアクションを実行したいと思います。

関数がクラスに渡され、この関数が完了時に実行される実装を見てきました。誰かが私にこれを行う方法の簡単な例を教えてもらえますか?

4

3 に答える 3

2

Androidで見られるように、関数はJavaのファーストクラスオブジェクトではありません。関数を渡すことはできません。Javaのイデオロギーでは、特殊化する必要がある場合に、ジェネリッククラスから(場合によっては匿名で)派生する必要があります。このような:

class MyActivity
{

    void onCreate()
    {
        MyButton.addOnClickListener(
            new LoginClass()
            {
                //Just like LoginClass, but with one method overridden
                public void login()
                {
                    super.login(); //Call the base
                    ThenSomethingElse();
                }
            });
    }
}

または、ログインクラス(カスタムアクションが必要なときに呼び出される関数)にフックを作成し、アクティビティのフックをオーバーライドすることもできます。これがJavaの方法です。

于 2012-08-17T14:10:08.607 に答える
1

ハンドラーを使用して、コールバックメカニズムを提供できます。

発信者にハンドラーを定義する

Handler mHandler = new Handler()
{
 public void handleMessage(Message msg)
 {
 }
}

ハンドラーをログイン関数に渡します。

LoginClass.login(mHandler);

次に、ハンドラーにメッセージを送信します。

public void login(Handler handler)
{
 handler.sendEmptyMessage(0);
}
于 2012-08-17T14:11:17.700 に答える
1
public class LoginClass {

    public void login(boolean b) {
        login.authorize(username,password); 
          if (b){
                 //do something
            }
          else {
                //do something
             }
    }

これを行うには、コンストラクター引数を使用するだけです。

Class 1
LoginClass loginClass = new LogonClass(false)

Class 2
LoginClass loginClass = new LogonClass(true)
于 2012-08-17T14:14:17.827 に答える