TextView中出现白屏

时间:2019-07-02 12:59:00

标签: android textview

我是Android的初学者。我想在TextView中打印此内容,但是屏幕全是白色,我看不到TextView的内容。在控制台中正常工作。下面是我的活动和布局文件。

public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

 Fruits();


}

public void Fruits() {

    textView= findViewById(R.id.pa);


    String[] fruit = {"orange", "apple", "pear", "bannana", "strawberry", "mango","grape","lemon"};
    Random numberGenerator = new Random();
    /* Generate A Random Number */
    int nextRandom = numberGenerator.nextInt(fruit.length)
    ;
    Set<Integer> validate = new HashSet<>();
    /* Add First Randomly Genrated Number To Set */
    validate.add(nextRandom);
    for (int i = 0; i < fruit.length; i++) {
        /* Generate Randoms Till You Find A Unique Random Number */
        while(validate.contains(nextRandom)) {
            nextRandom = numberGenerator.nextInt(fruit.length);
        }
        /* Add Newly Found Random Number To Validate */
        validate.add(nextRandom);
        System.out.println(fruit[nextRandom]);
        textView.setText(fruit[nextRandom]);


    }


}
}

布局

      <TextView
        android:id="@+id/pa"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

2 个答案:

答案 0 :(得分:0)

while循环将永远重复。 当i等于fruit.length-1时,validate已将数字存储在[0,fruit.length)范围内,这导致while循环中的条件始终为真,并且程序无法退出循环因为您在while循环内生成的nextNumber始终在[0,fruit.length)范围内。为简单起见,假设fruit数组只有一个元素。

答案 1 :(得分:0)

您的while循环是一个无限循环,因为验证集将同时包含所有8个值,并且始终为true。因此,永远不会设置textView并继续设置一次。

添加一个额外的检查,以检查while循环中set的大小:

 for (int i = 0; i < fruit.length; i++) {
            /* Generate Randoms Till You Find A Unique Random Number */
            while(validate.size() != fruit.length && validate.contains(nextRandom)) {
                nextRandom = numberGenerator.nextInt(fruit.length);
            }
            /* Add Newly Found Random Number To Validate */
            validate.add(nextRandom);
           Log.i("HELLO",fruit[nextRandom]);
            textView.setText(fruit[nextRandom]);
        }

以上内容将打印随机采摘的水果,并且在验证完成后将跳过。

注意:我添加了一个额外的set size检查(仅作为示例),您可以添加断点,而该断点必须在循环之外。