简单Java应用程序(3个按钮-每个按钮启动和停止计数)
我正在学习Java(我用C++编写了一些代码)。我只是想用线程创建一个应用程序。正如我所知,我不能使用线程来操作UI(主线程) 这个应用程序看起来像这样:画3个按钮,画3个文本框。 当我单击按钮1时,计数从TextView 1开始(从1到inf)。第二个和第三个是一样的。我需要做三个线程,但我不明白如何操作UI(用新的数字更新textview)。我也听说过AsyncTask,但我认为它不适用于这样的应用程序(请阅读,这是用于连接/下载等) 你们中的一些人能解释一下如何解决这个问题吗?我不需要任何代码,只需要一个解释——写这篇文章的最佳方式是什么:)简单Java应用程序(3个按钮-每个按钮启动和停止计数),java,android,multithreading,Java,Android,Multithreading,我正在学习Java(我用C++编写了一些代码)。我只是想用线程创建一个应用程序。正如我所知,我不能使用线程来操作UI(主线程) 这个应用程序看起来像这样:画3个按钮,画3个文本框。 当我单击按钮1时,计数从TextView 1开始(从1到inf)。第二个和第三个是一样的。我需要做三个线程,但我不明白如何操作UI(用新的数字更新textview)。我也听说过AsyncTask,但我认为它不适用于这样的应用程序(请阅读,这是用于连接/下载等) 你们中的一些人能解释一下如何解决这个问题吗?我不需要任何
谢谢大家! 对于文本和按钮,您可以在activity_main.xml文件中添加文本视图和按钮 对于每个按钮,设置一个方法,可能是在单击按钮时开始计算(视图)。在该方法中,添加一个处理程序:
final Handler h = new Handler();
final int DELAY = 1000; //milliseconds
h.postDelayed(new Runnable(){
public void run(){
//Increase textview number by one here
h.postDelayed(this, DELAY);
}
}, DELAY);
不需要异步任务
以下是您尝试构建的应用程序的简单版本:
主要活动
activity_main.xml
@疯狂,欢迎你。确保应用程序关闭时,循环停止。否则,它将持续运行。
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView tv1;
TextView tv2;
TextView tv3;
Button b1;
Button b2;
Button b3;
int time1 = 0;
int time2 = 0;
int time3 = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = (TextView)findViewById(R.id.tv1);
tv2 = (TextView)findViewById(R.id.tv2);
tv3 = (TextView)findViewById(R.id.tv3);
b1 = (Button)findViewById(R.id.b1);
b2 = (Button)findViewById(R.id.b2);
b3 = (Button)findViewById(R.id.b3);
}
public void startFirstTimer(View v){
time1 = 0;
final Handler h = new Handler();
final int DELAY = 1000; //milliseconds
h.postDelayed(new Runnable(){
public void run(){
time1++;
tv1.setText(Integer.toString(time1));
h.postDelayed(this, DELAY);
}
}, DELAY);
}
public void startSecondTimer(View view){
time2 = 0;
final Handler h = new Handler();
final int DELAY = 1000; //milliseconds
h.postDelayed(new Runnable(){
public void run(){
time2++;
tv2.setText(Integer.toString(time2));
h.postDelayed(this, DELAY);
}
}, DELAY);
}
public void startThirdTimer(View view){
time3 = 0;
final Handler h = new Handler();
final int DELAY = 1000; //milliseconds
h.postDelayed(new Runnable(){
public void run(){
time3++;
tv3.setText(Integer.toString(time3));
h.postDelayed(this, DELAY);
}
}, DELAY);
}
}
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_centerHorizontal="true"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/b1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start First Timer"
android:layout_below="@+id/tv1"
android:onClick="startFirstTimer"/>
<TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_below="@+id/b1"
android:layout_centerHorizontal="true"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/b2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start Second Timer"
android:layout_below="@+id/tv2"
android:onClick="startSecondTimer"/>
<TextView
android:id="@+id/tv3"
android:layout_width="match_parent"
android:layout_below="@+id/b2"
android:layout_centerHorizontal="true"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/b3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start Third Timer"
android:layout_below="@+id/tv3"
android:onClick="startThirdTimer"/>