Как создать экземпляр класса в Android, который также является действием? - PullRequest
0 голосов
/ 19 декабря 2011

В Android, как я могу создать constructor для class, который также является Activity?

Моя проблема в том,

Я хочу иметь два класса активности (эстимейтСопоставление), которые оба отправляют данные в класс деятельности (CalculateFare).Отображение берет данные из информации о сети в режиме реального времени, тогда как эстимейл оценки принимает данные из пользовательского ввода.Я хочу, чтобы CalculateFare мог использовать данные любого класса для выполнения вычислений, хотя у меня возникли проблемы с методом onCreate и конструктором для CalculateFare.Когда класс вызывается во время выполнения приложения, я получаю следующее сообщение в LogCat;

Unable to instantiate activity ComponentInfo. 

Фрагмент из CalculateFare выглядит следующим образом:

    public class CalculateFare extends Activity {
        TextView t;
        static long length;
        static int dist;
        static int mMonth;
        static int mDay;
        public static double fare;
        double rate1 = 0, rate2a, rate2b, rate3, rate4a, rate4b;
        int remDist = 0;
        double remLength;
        private static int TTS_DATA_CHECK = 1;
        private TextToSpeech tts = null;
        private boolean ttsIsInit = false;



public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fare);

}

public CalculateFare(long length, int dist, int mMonth, int mDay)
{
}

public static void setLength(long l)
{
    length = l;
}

public static void setDist(int d)
{
    dist = d;
}

public static void setDate(int m, int d)
{
    mMonth = m;
    mDay = d;
}

public void calc()
{

Any Advice многоцениться

Ответы [ 4 ]

2 голосов
/ 19 декабря 2011

В Android, как я могу создать конструктор для класса, который также является Activity?

Вы не.

Я хочу иметь два класса активности (эстимейта и сопоставления), которые оба отправляют данные в класс активности (вычисления).

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

Когда класс вызывается во время выполнения приложения, я получаю следующее сообщение в LogCat

Это потому, что вам нужно удалить ваш конструктор.

2 голосов
/ 19 декабря 2011

Переместите ваши данные в отдельный класс, который вообще не является действием, но распределяется между действиями.Данные могут быть структурированы в те данные, которые поступают от пользователя и те, которые поступают из сети.См., Например, этот поток о подходах к обмену данными между действиями.

Создание объекта CalculateFare, который оказывается действием, не поможет, когда платформа создает другой экземпляр, когда это необходимоДеятельность.

0 голосов
/ 18 мая 2015

Я пытался создать экземпляр Activity внутри себя, чтобы передать его методу другого класса. Я получил OutOfMemoryError. Таким образом, у меня был этот метод внутри самой Activity и я передал его как этот объект.

0 голосов
/ 19 декабря 2011

Действия не могут иметь определяемые пользователем конструкторы, только по умолчанию; они могут быть созданы только косвенно через намерение создания. Если вам нужно передать данные между действиями, сделайте это, добавив дополнительные данные в пакеты, например:

bundle.putInt("dist",dist);

, затем вы можете извлечь данные из пакета по

int dist = bundle.getInt("dist");

Положите дополнения перед началом занятия:

Intent i = new Intent(this, CalculateFare.class);
Bundle b = new Bundle();

b.putInt("dist",dist);
i.putExtras(b);
startActivity(i);

, а затем прочитайте дополнения в методе onCreate:

public void onCreate(Bundle savedInstanceState)
{
   super.onCreate(savedInstanceState);

   Bundle b = getIntent().getExtras();
   int dist;

   if (b != null)
   {
      dist = b.getInt("dist");
   }
}
...