-1

我已经设置了一个包含各种全局变量的 Java 类:

class GlobalClass extends Application {
int global_counter;

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

全局计数器是通过数组来计数的。当我在一项活动中更新它时:

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

它在该活动中运行良好。然而,如果我使用新的 XML 格式等开始一个新活动,然后声明使用全局变量,它不会返回其返回的附加量为 0。

我对所有这些java还是新手,所以请耐心等待。我是否缺少一些基本的东西,例如我的全局玻璃的 android 清单中的引用,或者我是否必须声明 globalClass global=newGlobal(); 在扩展活动类中?

任何帮助都会很棒

干杯

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 单例模式来拥有一个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. 如果您不想使用系统的 Application 对象机制,请谷歌该术语singleton并实现一个。单例是一个可以在任何地方访问的全局对象,它有一个实例并且可以保存全局变量。

于 2013-07-22T13:56:17.253 回答