-1

さまざまなグローバル変数を保持する Java クラスをセットアップしました。

class GlobalClass extends Application {
int global_counter;

String FileNameSmall[] = {"simage2", "simage1", "simage3"};
String FileName[] = {"image2", "image1", "image3"};
String Answers[] = {"blah1", "blah2", "blah3"};     
}

グローバル カウンターは、配列をカウントすることです。1 つのアクティビティで更新すると:

GlobalClass global = new GlobalClass();
global.global_counter = global.global_counter + 1;

その活動ではうまく機能します。しかし、新しい XML 形式などで新しいアクティビティを開始した場合、グローバル変数の使用を宣言すると、追加された量が 0 に返されません。

私はまだこのすべてのJavaに慣れていないので、しばらくお待ちください。グローバル グラスの Android マニフェストの参照のような基本的なものが欠けているのでしょうか、それとも globalClass global=newGlobal(); を宣言する必要がありますか? extendsアクティビティクラスで?

どんな助けでも素晴らしいでしょう

乾杯

4

3 に答える 3

1

static変数をメンバーとして宣言する必要があります。そうすれば、アプリケーション全体で同じ値になります。

public static int global_counter;

public static String FileNameSmall[] = {"simage2", "simage1", "simage3"};
public static String FileName[] = {"image2", "image1", "image3"};
public static String Answers[] = {"blah1", "blah2", "blah3"};    

ps: Java シングルトン パターンに従って 1 つのGlobalClassインスタンスを作成するか、あるアクティビティから最初に作成されたインスタンスを次のアクティビティに渡すこともできます。

これが役に立てば幸いです...乾杯!

于 2013-07-22T13:48:11.547 に答える
0

Activity.putExtraユーザーが新しい画面を作成して表示するボタンをクリックすると、この例のようにアクティビティ間で変数または情報を渡す必要があります。

 startForm.setOnClickListener(new OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                if ((!selectedFormCode.equalsIgnoreCase("")) && (!userCode.getText().toString().equals("")))
                {
                    Intent questionScreen = new Intent();
                    questionScreen.setClassName("com.android.artemis", "com.android.artemis.QuestionScreen");

                    func.ShowMessage("Loading Screen...");

                    // send preview config to next screen
                    questionScreen.putExtra("formProperties", formProperties.toString()); 
                    questionScreen.putExtra("selectedFormCode", selectedFormCode);
                    questionScreen.putExtra("selectedRegionCode", selectedRegionCode);
                    questionScreen.putExtra("selectedSubRegionCode", selectedSubRegionCode);
                    questionScreen.putExtra("selectedRegionLabel", selectedRegionLabel);
                    questionScreen.putExtra("selectedSubRegionLabel", selectedSubRegionLabel);
                    questionScreen.putExtra("userRegistrationCode", userCode.getText().toString());

                    startForm.setEnabled(false); // evita que o usuário clique mais de uma vez

                    startActivity(questionScreen);

                    startForm.setEnabled(true);
                }
                else
                {
                    func.ShowMessage("Complete todas as Informações antes de Continuar!");
                }
            }
        });

このようにして、次の画面で使用する情報のみを送信します。

于 2013-07-22T13:46:35.413 に答える
0

次のことを確認してください。

  1. 拡張Applicationクラス ( GlobalClass) は、次のようにマニフェスト XML 内で参照されます。<application android:name=".GlobalClass">

  2. Application オブジェクトへの参照を取得する必要がある場合はgetApplication()、アクティビティから関数を実行します。これを にキャストできますGlobalClass。手動で新しいインスタンスを作成することは正しくありません ( GlobalClass global = new GlobalClass())。

  3. アプリケーション オブジェクトはシングルトンであるため、変数は静的である必要はありません。

  4. システムのアプリケーション オブジェクト メカニズムを使用したくない場合は、用語singletonをググって実装してください。シングルトンは、単一のインスタンスを持ち、グローバル変数を保持できる、どこからでもアクセスできるグローバル オブジェクトです。

于 2013-07-22T13:56:17.253 に答える