【问题标题】:TextView[][] array is crashing app, why?TextView[][] 数组使应用程序崩溃,为什么?
【发布时间】:2014-07-05 21:28:45
【问题描述】:

我想使用一个 TextView 数组。当我尝试在每个 TextView 数组(代码中嵌套的“for”循环)中设置每个 TextView 的文本时,应用程序崩溃。这是我的代码:

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...");
    }
    }
}
}

我认为问题的一部分是在 onCreate() 方法之外声明和启动的 TextView[][] 数组。但是当我尝试在 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): 我看到这个日志出现了一次

谢谢

【问题讨论】:

    标签: android arrays textview multidimensional-array


    【解决方案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};
    

    【讨论】:

    • 应用程序仍然崩溃 - 这次它在建议代码的新行处崩溃。
    • 当您设置 TheArrayArrayFirstArraySecondArrayThirdArray 时仍然为空。您需要以正确的顺序设置所有内容。更新了示例。
    • 如果这能解决您的问题,请记得点赞/接受。
    • 成功了。我需要在包含它们的双数组之前声明和启动单个数组。谢谢。
    猜你喜欢
    • 2018-04-03
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多