1

ここに問題があります。選択したボタンに応じてint xが1〜6の数字に変更されるクラス(class1としましょう)があります。クラス 2 でこの int を呼び出せるようにする必要がありますが、新しい int x 値は読み取らず、デフォルトのみを読み取ります。

public class class1 extends Activity {
    private view btn1;
    private view btn2;
    //...
    private view btn6;
    public int x = 1;

btn1.setOnClickListener(sbtn1Listener);
//...
btn2.setOnClickListener(sbtn2Listener);

private View.OnClickListener sbtn1Listener = new View.OnClickListener() {
    public void onClick(View v) {
        x = 1;
    }
};
private View.OnClickListener sbtn2Listener = new View.OnClickListener() {
    public void onClick(View v) {
        x = 2;
    }
};
//...

ボタンはそのプログラムで正常に機能します。他にもありますが、今はそのままにしておきます。次に、class2 は新しい値を読み取る必要があります。

public class class2 extends BaseObject {
    public int y = 1;

    class1 a = new class1();
    a.getx();

    y = a;

    if (y == 1) {
    }else if (y == 2){
    //...

class1 から新しい x 値を読み取る代わりに、デフォルト セットを 1 として読み取るだけです。

また、すべてのコンポーネントを実行するには BaseObject が必要であるため、class2 の拡張部分を変更できないことに注意してください。

4

2 に答える 2

2

これは、class2 がクラス 1 の新しいインスタンスを作成しているためです。

必要なことは、クラス 1 の既存のインスタンスにアクセスすることです。

クラス 2 をグローバル化し、クラス 1 を介して設定すると、アクセスできるようになります。

public class class1 extends Activity {
private view btn1;
private view btn2;
//...
private view btn6;
public int x = 1;
public class2 cls2; // SET GLOBAL. Needs initialising somewhere relevant.

btn1.setOnClickListener(sbtn1Listener);
//...
btn2.setOnClickListener(sbtn2Listener);

private View.OnClickListener sbtn1Listener = new View.OnClickListener() {
public void onClick(View v) {
    x = 1;
    cls2.x = 1; // Or use setter methods in class 2.
}
};
private View.OnClickListener sbtn2Listener = new View.OnClickListener() {
public void onClick(View v) {
    x = 2;
    cls2.x = 2;
}
};

次に、クラス 2 に x というパブリック変数があります。(クリックリスナーで設定しているもの。

重要: クラス 2 を呼び出す場合は、新しいインスタンスではなく、必ずグローバル インスタンスとして割り当ててください。

于 2012-08-28T17:46:30.180 に答える
2

作るint x a static variable.

例えば:

public static int x = 1;

このような別のクラスからアクセスします...

int y = class1.x;

// これは、変更された x 値を反映します。

于 2012-08-28T17:46:50.673 に答える