2

私は空き時間に数か月間アンドロイドに取り組んできたので、おそらくばかげた質問をするつもりです。

クラスで、ボタンなどのオブジェクトを作成し、他のクラスから「到達」したいと考えています。

もちろん、私はこのようにすることができます:

public class CreateButton{

      public void createButton(){

         Button myButton = new Button(context);         

        //I can "pass" my object to another class this way
        ManageButton manageButton = new ManageButton(myButton);

        // or this way
        manageButton.writeButtonTextMethod(myButton); 

     }
}

またはこの方法

public class CreateButton{

      public Button createButton(){

        Button myButton = new Button(context);
        return myButton;

      }

}


public class ManageButton{

      public void writeButtonTextMethod(){

        CreateButton createButton = new CreateButton()     
        Button myButton = createButton.createButton();
        myButton.setText("W"); 

      }   
}

ManageButton.class (および他のクラス)から直接createButton.classで作成された myButton に「到達」する方法があるかどうか疑問に思っています。

上記のコードでは、myButton を管理できるようにするには、 ManageButton.class から createButton.classを「呼び出す」必要があります。

myButton staticにすることはできますが、ビューを static にするのは正しくありません。

たとえば、Applicationを拡張するクラスで作成された変数に簡単にアクセスできます。ビューに似たものはありますか?

4

3 に答える 3

2

多くの人/ガイド/記事の主張は可能であり、次のようにアプリケーションを使用することで、アクティビティ間でオブジェクト (およびフィールド) を正しく共有できます。

このような人はmyButton非常に慎重に行わないとメモリ リークが発生するので、ばかです。

そのため、さまざまなアクティビティ間でオブジェクト (TextView、Button、ImgaeView など) を共有する方法がまだわかりません。

アクティビティ間でウィジェットを共有しません。せいぜい、アクティビティ間でモデル データを共有するだけです (または、一元的に保存されたモデル データへのポインターを共有することをお勧めします)。

Web アプリでは、Web ページ間で DOM ノードを共有することはできません。せいぜい、Web ページ間で GET パラメータなどとして渡されたデータを共有するか、ローカルの中央ストレージ (Cookie、ローカル ストレージ、IndexedDB など) にデータを保存します。Android アクティビティは Web ページのようなもので、疎結合です。

ウィジェットを共有する必要があるほど密接に結合されたUI の部分がある場合、それらは別個のアクティビティであってはなりません。

于 2013-02-11T13:13:28.867 に答える
0

ビューは、アクティビティ間で共有されることを意図していません。これを無視してそれらを共有したとしても、 に遭遇する可能性が高くなりますWindowManager$BadTokenException.

ただし、ビュー以外のオブジェクトの共有に関するより一般的な方法で質問に答えるには、Application クラスが正しい方法です。ただし、オブジェクトを静的にすることは正しい方法ではありません。代わりに、インスタンス変数を作成し、次を使用してさまざまなアクティビティでアクセスします。

Application application:

//Below line is in onCreate()
application = this.getApplication();

その後、次を使用して簡単にアクセスします

application.myObject; //Or you could use getters and setters. Your choice.
于 2013-02-11T13:15:23.763 に答える
0

2 つのアクティビティで 1 つのボタンを共有する理由がよくわかりません。ActivityAまたはActivityBのボタンですか?必要ありません、またはそれを行うために使用します..行うべきではありません。

編集:これはAndroidよりもJavaの基本的なトピックです..そして、私が理解したことから、私見がメソッドである何かを「クラス」と呼びます(クラスを呼び出すことができず、何を説明したかのため)。

ここで私があなたに与えることができる最高のアドバイス:

  1. Java の基本 (メソッド、クラス、オブジェクト、コンストラクター、継承など) の学習
  2. Android の基本を学習します (よく理解できるまで、1 つのアクティビティを含む簡単な例)
  3. 標準ボタンを拡張するMyButtonクラスを作成し
  4. ボタンを作成し、そのプロパティを変更します

このいくつかのタスクは、しばらくの間あなたを忙しくさせます。後で複雑なアプリで簡単になるので、気楽にやってください。お役に立てば幸いです。乾杯

EDIT2: uが書いた最後の例(この回答へのコメント)では、2つのアクティビティ間でボタンを共有しない前にuを書いたので、何も意味がありません。一時停止!もう一度お読みください: 2 つの Activies 間でボタンを共有しないでください。A と Z の場合、クラスと「共有」ボタンだけを言うことができないため、u が尋ねた質問は明確ではありません。どのクラス?コード行が書かれていないので、あなたが何を望んでいるのかを理解するのは本当に難しい.. :s

最後の最後の編集:マン..Javaの基本が欠けていることを理解してください。ここに悪い意図はありません。あなたを導き、何を勉強すべきかを正確に伝えてください。なんで?クラスがまったく同じ名前の1つのメソッドを備えている場合、あなたが何を意味するのかを説明するのに混乱していても驚かないからです..それらは「何かをしている」オブジェクトにすぎません。存在しないなど..学び、次回はすぐにコードを書いて、私たち全員の時間を節約してください。乾杯して楽しく学びましょう

于 2013-02-11T13:17:13.557 に答える