0

最初のアクティビティで作成した変数とオブジェクト (TextView、ボタンなど) を他のすべてのアクティビティやクラスと共有する必要があります。

例えば:

ステップ 1: 私のメイン アクティビティ (クラス A) で、複数のボタンを動的に作成するメソッド (クラス B) を呼び出します。

ステップ 2: ユーザーがこれらのボタンのいずれかをクリックすると、ユーザーが「何かをした」かどうかを確認するメソッド (クラス C) が呼び出されます。

ステップ 3: ユーザーが何かを行った場合、クラス C から、クラス B で作成したすべてのボタンを無効にするメソッド (クラス D) を呼び出します。

質問: クラス D から、クラス B で作成されたボタンに到達する正しい方法は何ですか?

どのように処理すればよいですか?アクティビティではない単純なクラス内でもこのオブジェクトと変数を使用する必要があるため、アプリケーションを使用できません。

4

1 に答える 1

0

これがあなたの説明に基づく提案です。私はすべて心を込めて入力しているため、いくつかのタイプミスがある可能性があることを覚えておいてください.

ステップ 1: 私のメイン アクティビティ (クラス A) で、複数のボタンを動的に作成するメソッド (クラス B) を呼び出します。

public class A extends Activity implements OnClickListener{
      private ArrayList<Buttons> mybuttons = new ArrayList<Butons>

      // ... at some point you call B
      mybuttons.addAll(b.createButton(this));
           // createButtons should receive an OnClickListener as parameter to set on the buttons
           // createButtons returns a List<Buttons> that you add to your list.
           // note that it's NOT a static list, and that the list is part of the Activity, the Activity can hold reference to its views without problem

}

ステップ 2: ユーザーがこれらのボタンのいずれかをクリックすると、ユーザーが「何かをした」かどうかを確認するメソッド (クラス C) が呼び出されます。

ステップ 3: ユーザーが何かを行った場合、クラス C から、クラス B で作成したすべてのボタンを無効にするメソッド (クラス D) を呼び出します。

  // because A implements the OnClickListener, the OnClick is called inside A
  onClick(View v){
        // call the C to check. and make it return a boolean (true or false)
       if(c.CheckStuff()){
           // disable your buttons.
           for(Button btn:mybuttons) {  btn.setEnabled(false);  }
        }
  }

質問: クラス D から、クラス B で作成されたボタンに到達する正しい方法は何ですか?

回答: 公平を期すために、D がボタンを無効にするだけの場合は、私が入力した 1 行だけである必要はありません。それ以上のことをしている場合は、D に渡すことができますがmybuttons、D はアクティビティのライフサイクルの一部ではないため、D 内で永続的な参照を保持しないことを強くお勧めします。

于 2013-02-08T12:31:27.787 に答える