gpt4 book ai didi

java - 屏幕加载 Android 上的随机 TextView

转载 作者:行者123 更新时间:2023-11-29 19:57:46 24 4
gpt4 key购买 nike

我正在使用 android Studio 做一种游戏,我想做一些类似于现在游戏加载屏幕的事情,其中​​屏幕上会出现随机文本。

我想在 TextView 上放 4 个句子,例如“Chargin one”“Chargin two”“Chargin three”和“Chargin four”这个想法是显示一个,等待 1-2 秒显示下一个,当所有的时候已显示继续其他事情。

我已经通过执行一个线程并设置 TextView 的文本来尝试它,但是我得到了下一个错误:唯一可以修改 TextView 的人是主线程。我该怎么办?

这应该进入线程:

int num = 1;
int aleatorio;
while(num<4) {
Random r = new Random();
aleatorio = r.nextInt(frasesCarga.size() - 1);
fraseCarga.setText(frasesCarga.get(aleatorio));
num++;
frasesCarga.remove(aleatorio);
}

如果有人需要,我会发布类(class)。

LoadActivity.class

package es.fingerlabs.gamecohol;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Random;

public class Jugar extends AppCompatActivity {

private ArrayList<String> frasesCarga;
private TextView fraseCarga;
private int vivo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jugar);

fraseCarga = (TextView) findViewById(R.id.tvFraseCargandoJugar);

frasesCarga = new ArrayList<String>();
frasesCarga.add("Preparando Cubatas");
frasesCarga.add("Haciendo hielo");
frasesCarga.add("Mezclando preguntas");
frasesCarga.add("Cogiendo sitio");
frasesCarga.add("Poniendo chupitos");

Thread timerThread = new Thread() {
public void run() {
try {
int num = 1;
int aleatorio;
while(num<4) {
sleep(1000);
Random r = new Random();
aleatorio = r.nextInt(frasesCarga.size() - 1);
fraseCarga.setText(frasesCarga.get(aleatorio));
num++;
frasesCarga.remove(aleatorio);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
timerThread.start();






}

@Override
public void onBackPressed() {
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("¿Salir de la partida?")
.setMessage("Si sales se perdera el progreso de la partida")
.setPositiveButton("Si", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}

})
.setNegativeButton("No", null)
.show();
}

}

最佳答案

问题是您正在尝试在 Android 禁止的非 UI 线程中使用 View 。为了您的目的,有多种方法可以做到这一点,例如 HandlersAsyncTaskAysncTask 对您来说很容易。

像这样创建一个AsyncTask -

class MyTask extends AsyncTask<Void,String,Void>{

@Override
protected Void doInBackground(Void... params) {
try {
int num = 1;
int aleatorio;
while(num<4) {

Random r = new Random();
aleatorio = r.nextInt(frasesCarga.size() - 1);
publishProgress(frasesCarga.get(aleatorio));
num++;
frasesCarga.remove(aleatorio);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);

fraseCarga.setText(values[0]);
}
}

然后在 onCreate() 中开始您的任务 -

new MyTask().execute();

关于java - 屏幕加载 Android 上的随机 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36558189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com