TextView [][] массив приводит к сбою приложения, почему?

#android #arrays #textview #multidimensional-array

#Android #массивы #textview #многомерный массив

Вопрос:

Я хочу использовать массив массивов TextView. Приложение выходит из строя, когда я пытаюсь установить текст каждого TextView в каждом массиве TextView (вложенный цикл ‘for’ в коде). Вот мой код:

 package com.example.whynotworking;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends Activity {

TextView[] FirstArray;
TextView[] SecondArray;
TextView[] ThirdArray;

int SizeOfTextViewArrays;

TextView[][] TheArrayArray = {FirstArray,SecondArray,ThirdArray};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Log.d("DebugTAG", "no problems yet");

    SizeOfTextViewArrays = 5;

    FirstArray = new TextView[SizeOfTextViewArrays];
    SecondArray = new TextView[SizeOfTextViewArrays];
    ThirdArray = new TextView[SizeOfTextViewArrays];

    Log.d("DebugTAG", "still no problems");

    taskIwantToDo();
}

public void taskIwantToDo() {
    for (int i = 0; i < TheArrayArray.length; i  ) {
    for (int j = 0; j < SizeOfTextViewArrays; j  ) {
        Log.d("DebugTAG", "I see this log come up once");
        TheArrayArray[i][j].setText("Text to set...");
        Log.d("DebugTAG", "But I don't see this one...");
    }
    }
}
}
  

Я думаю, что часть проблемы заключается в том, что массив TextView [][] объявляется и инициируется вне метода onCreate(). Но когда я пытаюсь запустить его внутри onCreate (), он (eclipse IDE) сообщает мне «Константы массива могут использоваться только в инициализаторах»…

Вывод LogCat:

07-05 21:08: 20.346: D / DebugTAG (340): пока проблем нет 07-05 21:08: 20.346: D / DebugTAG (340): по-прежнему без проблем 07-05 21:08: 20.346: D / DebugTAG (340): я вижу, что этот журнал появляется один раз

Спасибо

Ответ №1:

вам нужно создать содержимое ваших массивов:

 public void taskIwantToDo() {
    for (int i = 0; i < TheArrayArray.length; i  ) {
        for (int j = 0; j < SizeOfTextViewArrays; j  ) {
            TheArrayArray[i][j] = new TextView(this); // <-- THIS LINE
            TheArrayArray[i][j].setText("Text to set...");
        }
    }
}
  

однако перед этим вам необходимо правильно создать свои массивы. либо делайте все это на уровне модуля:

 int SizeOfTextViewArrays = 5;

TextView[] FirstArray = new TextView[SizeOfTextViewArrays];
TextView[] SecondArray = new TextView[SizeOfTextViewArrays];
TextView[] ThirdArray = new TextView[SizeOfTextViewArrays];

TextView[][] TheArrayArray = {FirstArray,SecondArray,ThirdArray};
  

или сделайте все это в onCreate :

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Log.d("DebugTAG", "no problems yet");

    SizeOfTextViewArrays = 5;

    FirstArray = new TextView[SizeOfTextViewArrays];
    SecondArray = new TextView[SizeOfTextViewArrays];
    ThirdArray = new TextView[SizeOfTextViewArrays];

    TheArrayArray = {FirstArray,SecondArray,ThirdArray};
  

Комментарии:

1. Приложение по-прежнему выходит из строя — на этот раз оно выходит из строя в новой строке предлагаемого кода.

2. при настройке TheArrayArray , FirstArray , SecondArray и ThirdArray по-прежнему равно нулю. вам нужно настроить все в правильном порядке. обновлено примерами.

3. пожалуйста, не забудьте проголосовать / принять, если это решит вашу проблему.

4. Это сделало свое дело. Мне нужно было объявить и инициировать одиночные массивы перед двойным массивом, который их содержит. Спасибо.