gpt4 book ai didi

android - TextView一直显示文字

转载 作者:行者123 更新时间:2023-11-29 17:26:43 24 4
gpt4 key购买 nike

我希望我的文本对象在 startGame() 函数中完成 for 循环后在 TextView 中显示字符串,但它一进入 startGame() 函数就显示 TextView。我不知道这可能是执行顺序错误还是什么,但是有人可以帮助我吗?

这是我的代码:` 导入 android.graphics.Color; 导入 android.os.Bundle; 导入 android.support.v7.app.AppCompatActivity; 导入 android.view.View; 导入 android.widget.Button; 导入 android.widget.TextView; 导入 java.util.Random; 导入 java.util.Timer; 导入 java.util.TimerTask;

public class EasyGameActivity extends AppCompatActivity
{

private int counter;
private TextView text;
private boolean flag = false;
private Button button = null;

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

startGame();
}

public void startGame()
{
counter = 3;
int temp;
int i;
int level = 1;
long nanoSec = 0;
final Random rand = new Random();
Timer timer = new Timer();


while(true)
{
BinaryTree binaryTree = new BinaryTree(counter);
nanoSec = 2000;

for(i = 0; i<counter; ++i)
{
temp = rand.nextInt(4);

switch(temp)
{
case 0:
button = (Button) findViewById(R.id.button5); break;

case 1:
button = (Button) findViewById(R.id.button6); break;

case 2:
button = (Button) findViewById(R.id.button7); break;

case 3:
button = (Button) findViewById(R.id.button8); break;
}

timer.schedule(new MyTask(button, temp), nanoSec);
timer.schedule(new MyTask(button, -1), nanoSec + 500);

nanoSec += 2000;
binaryTree.insert(temp);

}

text = (TextView) findViewById(R.id.levelText);
text.setText("Level: " + level);

break;
}


}



class MyTask extends TimerTask
{
private Button buttonId;
private int buttonNumb;

public MyTask(Button buttonId, int temp)
{
super();
this.buttonId = buttonId;
buttonNumb = temp;
}

@Override
public void run()
{
runOnUiThread(new Runnable() {

@Override
public void run()
{
if(buttonNumb == -1)
{
buttonId.setBackgroundColor(Color.BLACK);
}

else if(buttonNumb == 0)
{
buttonId.setBackgroundColor(Color.YELLOW);
}


else if(buttonNumb == 1)
{
buttonId.setBackgroundColor(Color.BLUE);

}

else if(buttonNumb == 2)
{
buttonId.setBackgroundColor(Color.RED);
}


else if(buttonNumb == 3)
{
buttonId.setBackgroundColor(Color.GREEN);
}
}
});
}
}

}

`

这是我的 xml 文件:`

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<TextView
android:id="@+id/levelText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="50dp"
android:textColor="#FFFFFF"
android:text = "" />

<TextView
android:id="@+id/countDnText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textSize="100dp"
android:textStyle="bold"
android:textColor="#FFFFFF"
android:text=""
/>


<Button
android:layout_width="160dp"
android:layout_height="200dp"
android:background="#000000"
android:id="@+id/button5"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="79dp" />

<Button
android:layout_width="160dp"
android:layout_height="200dp"
android:background="#000000"
android:id="@+id/button6"
android:layout_alignTop="@+id/button5"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
/>

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="160dp"
android:layout_height="200dp"
android:background="#000000"
android:id="@+id/button7"
android:layout_below="@+id/button5"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="10dp" />

<Button
android:layout_width="160dp"
android:layout_height="200dp"
android:background="#000000"
android:id="@+id/button8"
android:layout_alignTop="@+id/button7"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

</RelativeLayout>

`

最佳答案

您的代码不会在设置 TextView 的文本之前等待计时器完成,因此它的工作方式如下(任意 ms 值来说明我的观点):

  • 0ms - 运行 For 循环,排队计时器 - 运行第一个计时器 (@nanoSecond = 0)
  • 10ms - 设置 TextView 文本
  • 500 毫秒 - 第二个任务触发 (@nanoSecond = 500)
  • 等对于其他 For 循环项。

您可以简单地将编辑文本设置为在计时器上发生,就像您有每个任务 (@nanoSecond) 一样,它将在其他任务之后排队。这样的东西应该可以工作(替换您当前的 TextView 代码)。

final TextView textView = (TextView) findViewById(R.id.levelText);
Handler handler = new Handler();
handler.postDelayed(new Runnable{
@Override
public void run(){
textView.setText("Level: " + level);
}
}, nanoSec);

关于android - TextView一直显示文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34364209/

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