Android-массив как глобальная переменная - PullRequest
0 голосов
/ 21 февраля 2011

Я знаю, как передать переменную из одного действия в другое, используя глобальные переменные.

например, в 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 ]

2 голосов
/ 21 февраля 2011

Выбранный вами метод (создание статического экземпляра) БУДЕТ работать для такого объекта, как ArrayList, так же, как вы это делали с примитивом (это создает Singleton).

Однако в большинстве случаев создание статических полей для передачи данных между операциями определенно не рекомендуется.Как примитивные данные, так и ArrayList<String> могут быть переданы как дополнительные функции в намерении, которое вы используете для запуска другого действия.

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);

Если вы передаете данные в диалог, вы можете вызвать метод установки и передать все, что хотите, не беспокоясь о существующих границах.между мероприятиями.Например, с помощью специального диалогового окна реализуйте метод в своем диалоговом окне, чтобы вы могли установить значение перед его отображением.

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() для передачи данных перед их отображением.Если ваш Activity управляет диалогом для вас (вы звоните showDialog() из Activity), вызовите сеттер в onCreateDialog() или onPrepareDialog() ... в зависимости от того, что больше подходит.

Надеюсь, чтопомогает!

1 голос
/ 21 февраля 2011

Если вы хотите отправить данные с одного Activity на другой, вам следует использовать Intent.Например:

Intent intent = new Intent().setClass(getApplicationContext(), CollegeDetails.class);
intent.putExtra("key", objectvalue);
startActivity(intent);
0 голосов
/ 21 февраля 2011

Вы захотите создать экземпляр класса, который хотите использовать в другом классе, а затем получить доступ к массиву.

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

Public Class MyClassTwo
{
  private myClassInstance = new MyClass();
  myClassInstance.myArr = "hello world";
}
0 голосов
/ 21 февраля 2011

На мой взгляд, это идеальная возможность для контент-провайдера

Если вы незнакомы с ними, посмотрите здесь: http://developer.android.com/guide/topics/providers/content-providers.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...