在尝试创建应用时,我发现如果我尝试运行类似的功能:
int i = 1;
String s = "";
while(true)
{
text.setText(sint.valueOf(i)
i=i+1;
}
其中text是文本视图 并且该功能由一个按钮调用On Click Listener,该应用程序卡在屏幕上增加文本视图的值
有没有办法让这项工作没有设置延迟或延迟最小
如果是这样的id就像一个例子
答案 0 :(得分:1)
在Activity(或Fragment,或其他)中声明int变量,然后在每次单击时增加该值并将其设置为TextView
。你正在做什么不起作用,因为你的while循环是无限的,它在UI线程上运行,因此它阻止了UI,TextView
永远不会有机会更新。
public class MainActivity extends AppCompatActivity {
private int counter;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
textView.setText(String.valueOf(counter));
textView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
textView.setText(String.valueOf(++counter));
}
});
}
}
修改强>
我不确定我是否理解你在这里想要实现的目标,但试试这个。这个想法是,你有一个线程,增加计数器FAST,然后你有一个更新TextView的动画,它将尝试以60fps这样做,所以它会跳过很多数字。您无法快速更新计数器,同时在每次增量时更新TextView。这看起来对我来说完全是胡说八道,但看到快速增长的数字很有趣:)
public class MainActivity extends AppCompatActivity {
private int counter;
private TextView textView;
boolean running;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.text_view);
textView.setText(String.valueOf(counter));
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Animation animation = new Animation(){
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
textView.setText(String.valueOf(counter));
}
};
animation.setRepeatCount(Animation.INFINITE);
textView.startAnimation(animation);
new Thread(){
@Override
public void run() {
running = true;
while(running)
counter++;
}
}.start();
}
});
}
@Override
protected void onStop() {
super.onStop();
running = false;
}
}
答案 1 :(得分:0)
你可以做这样的方法
private void updateTxt(String newText) {
txt.setText(newText);
}
并在需要更新TextView