我有一个实现一些按钮和计数器的类,当我按下一个按钮时,我需要在TextView中设置一些文本来设置其他内容。这并不是什么疯狂的事情,这就是为什么我不能理解为什么它不能工作。
有效的按钮onClick方法:
public class Main extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout linLayout = (LinearLayout)findViewById(R.id.main_view);
Button button_2 = new Button(this);
button_2.setText("2");
button_2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
setValues(2, 2);
((TextView)findViewById(R.id.counter_label)).setText("You Pressed 2");
updateScrollText();
startTimer(200000);
}
}
linLayout.addView(button_2);
}
public void setValues(int first, int second);
this.first = first;
this.second = second;
}
...但是当我试着把它放到我的计时器中时:
private void startTimer(long time){
counter = new CountDownTimer(time, 1000){
public void onTick(long millisUntilDone){
Log.d("counter_label", "Counter text should be changed");
((TextView)findViewById(R.id.counter_label)).setText("You have " + millisUntilDone + "ms");
}
public void onFinish() {
((TextView)findViewById(R.id.counter_label)).setText("DONE!");
}
}.start();
}令人沮丧的是,LogCat在每个节拍上都显示“计数器文本应该被更改”,就像它应该显示的那样,它实际上并没有更改文本。有什么线索吗?我已经清理了项目,其他一切都正常工作。
我还注意到另一个计数器定时器正在做类似的事情(显示时间,直到它完成)是100%工作,我没有触摸它,现在它也没有设置文本。它会在1秒后停止更改文本,但计数器会继续倒计时。
发布于 2013-07-03 02:55:40
您的计时器可能没有在UI线程上运行,但只有UI线程可以操作UI。只需将您的setText包装如下(假设您正在进行一项活动):
runOnUiThread(new Runnable() {
@Override
public void run() {
((TextView)findViewById(R.id.counter_label)).setText("You have " + millisUntilDone + "ms");
}
});发布于 2013-07-03 03:36:20
我采用了你发布的代码,对它进行了一些修改,我不得不说它对我来说很有效。看看这个:
public class MainActivity extends Activity {
TextView tvCountdown;
Button btnCountdownStarter;
int mFirst;
int mSecond;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvCountdown = (TextView) findViewById(R.id.tvCountdown);
tvCountdown.setText("timer");
btnCountdownStarter = (Button) findViewById(R.id.btnCountdownStarter);
btnCountdownStarter.setText("button");
btnCountdownStarter.setOnClickListener(new View.OnClickListener() {
public void onClick(View v){
setValues(2, 2);
tvCountdown.setText("You pressed 2");
startTimer(20*1000);
}
});
}
public void setValues(int first, int second) {
mFirst = first;
mSecond = second;
}
private void startTimer(long time) {
new CountDownTimer(time, 1*1000) {
public void onTick(long millisUntilFinished) {
tvCountdown.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
tvCountdown.setText("done!");
}
}.start();
}}
我唯一修改的是在xml文件中创建两个视图,而不是在onCreate方法中。activity_main文件:
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/tvCountdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btnCountdownStarter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tvCountdown" />
https://stackoverflow.com/questions/17433261
复制相似问题