Android数组作为全局变量

时间:2011-02-21 18:23:43

标签: android arrays global-variables

我知道如何使用全局变量将变量从一个活动传递到另一个活动。

e.g。 在one.java中:

   GlobalVars.setColour(0);

在two.java中:

 if (GlobalVars.getColour() == 0) ...

GlobalVariables.java:

 private static int colour2;

    public static int getColour() {
        return colour2;
    }

    public static void setColour(int colour) {
        colour2 = colour;
    }

如果我在one.java中有一个数组并且我需要在另一个类中怎么办?

 ArrayList<String> myArr = new ArrayList<String>();

myArr上传了手机电话簿中的联系人,因此它是动态的。我需要它在自定义对话框类中上传ListView及其元素。如何将其传递给另一个活动/对话框?

4 个答案:

答案 0 :(得分:2)

您选择的方法(创建静态实例)将以与您对基元相同的方式(例如创建单例)对象ArrayList之类的对象起作用。

但是,在大多数情况下,绝对不建议仅在活动之间传递数据来创建静态字段。原始数据和ArrayList<String>都可以在用于启动另一个Activity的Intent中作为额外内容传递。

private ArrayList<String> mArray;
private String mString;
private int mValue;

Intent intent = new Intent(this, NewActivity.class);
intent.putExtra("arrayListExtra", mArray);
intent.putExtra("stringExtra", mString);
intent.putExtra("intExtra", mValue);
startActivity(intent);

所有这些数据类型(以及更多)都可以在Intent中无缝传递。然后,您可以在另一侧访问它们,如下所示:

Intent intent = getIntent();
ArrayList<String> array = intent.getStringArrayListExtra("arrayListExtra");
String string = intent.getStringExtra("stringExtra");
int value = intent.getIntExtra("intExtra", 0);

如果要将数据传递给Dialog,则可以调用setter方法并传递任何所需内容,而不必担心活动之间存在的边界。例如,使用自定义Dialog在对话框中实现一个方法,以便在显示之前设置该值。

public class MyDialog extends Dialog {
    private ArrayList<String> mItems;

    //All other methods of the dialog here

    public void setItems(ArrayList<String> items) {
        mItems = items;
    }
}

然后,在您计划创建的活动的任何方法中,并显示对话框

//theArray is your ArrayList<String> with data.
MyDialog dialog = new MyDialog();
dialog.setItems(theArray);
dialog.show();

请注意,这是将项目列表传递给AlertDialog以供显示的方法。这些对话框还有像setItems()这样的方法,可以在显示数据之前传递数据。如果您是“活动”为您管理对话框(您从“活动”中调用showDialog()),请在onCreateDialog()onPrepareDialog()中调用设置者...以更合适的方式。

希望有所帮助!

答案 1 :(得分:1)

如果您要将数据从Activity发送到另一个Intent,则应使用Intent intent = new Intent().setClass(getApplicationContext(), CollegeDetails.class); intent.putExtra("key", objectvalue); startActivity(intent); 。例如:

{{1}}

答案 2 :(得分:0)

在我看来,对于内容提供商来说,这听起来像是一个理想的机会

如果不熟悉它们,请看这里: http://developer.android.com/guide/topics/providers/content-providers.html

答案 3 :(得分:0)

您需要创建要在其他类中使用的类的实例,然后访问该数组。

Public Class MyClass 
{
  public ArrayList<String> myArr = new ArrayList<String>(); 
}

Public Class MyClassTwo
{
  private myClassInstance = new MyClass();
  myClassInstance.myArr = "hello world";
}