Начинающий - использование переменных, определенных в одном классе в другом классе - PullRequest
4 голосов
/ 18 апреля 2011

Итак, допустим, в моей основной деятельности у меня есть массив, объявленный так, что у меня нет проблем с использованием внутри любого из методов main:

public int currentPrices[] = {0,0,0,0,0,0,0,0,0};

Теперь мой класс buyDialog выглядит следующим образом:

package foosh.Frontier;


import android.app.Activity;
import android.os.Bundle;
import foosh.Frontier.*;

public class buyDialog extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // Be sure to call the super class.
        super.onCreate(savedInstanceState);

        currentPrices[0]=999;

        //insert setup magic here
        setContentView(R.layout.buydialog);
}  }

Eclipse постоянно говорит, что currentPrices не может быть разрешена. Как связать дочернюю активность с переменными родительской активности?

Возможно, я ошибся в своих намерениях, так как я совсем новичок в их построении. Но вот эта строка из основного:

case R.id.buyButton1: 
            currentRes = masterRes.get(0);
            Intent intent = new Intent();
            intent.setClass(main.this, buyDialog.class);
            startActivity(intent);

Ответы [ 2 ]

8 голосов
/ 18 апреля 2011

Простой ответ заключается в том, что вы должны квалифицировать его с именем содержащего экземпляра.

Поэтому, если для доступа к полю currentPrices используется экземпляр myinstance, вы должны сделать это:

myinstance.currentPrices

Тем не менее, вам действительно следует использовать методы получения и установки, и здесь есть гораздо больше вопросов, касающихся фактического получения дескриптора экземпляра действия.Я бы посоветовал заглянуть во вступительную книгу по Java, прежде чем запачкать руки на Android.Проверьте http://math.hws.edu/javanotes/ для хорошего онлайн-введения.

Основываясь на вашем теге, я предполагаю, что у вас есть некоторое представление о глобальных переменных.В Java такого нет.На практике вы можете иметь static переменные, которые доступны глобально.Например,

public class MyClass{
  public static int MY_VALUE = 4;
}

Вы можете получить доступ, написав

MyClass.MY_VALUE

Однако с переменными экземпляра, т. Е. Переменными, которые не определены по ключевому слову static, у вас естьэкземпляр класса, который был выделен с помощью ключевого слова new.

Например,

MyClass someInstance = new MyClass();
someInstance.currentPrices

Причина, по которой это сложнее с операциями, заключается в том, что у вас нет доступа кэкземпляр класса деятельности, который используется, если вы не делаете что-то действительно творческое.

Имеет ли это смысл?

2 голосов
/ 18 апреля 2011

Если вам когда-либо понадобится сделать это без создания статической переменной, вы также можете передать массив через Intent как дополнительный, например, так:

intent.putExtra("currentPrices", currentPrices);
startActivity(intent);

Затем, как только вы попадете в новуюУпражнение, извлеките его так:

int[] currentPrices = getIntent().getIntArrayExtra("currentPrices");

Похоже, что вы изменяете оригинал из диалогового окна, хотя, за исключением использования startActivityForResult() и такой обработки, метод Криса намного проще.

...