我只想弄清楚如何在文本字段中显示上升数字。
所以我尝试了这个,它编译但快速崩溃xd。
我的activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/padre"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:orientation="horizontal">
<TextView
android:id="@+id/mytextview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
我的MainActivity.java
public class MainActivity extends AppCompatActivity {
public int cont=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Timer timer=new Timer();
TimerTask task = new TimerTask() {
@Override
public void run()
{
update();
}
};
timer.scheduleAtFixedRate(task, 100, 1000);
}
public void update() {
TextView campoTexto=(TextView) findViewById(R.id.mytextview);
campoTexto.setText(cont);
cont++;
}
}
答案 0 :(得分:0)
您无法将整数值设置为TextView。在将整数设置为TextView之前,应将其转换为字符串。使用下面的代码将整数设置为TextView
public void update() {
TextView campoTexto=(TextView) findViewById(R.id.mytextview);
campoTexto.setText(String.valueOf(cont));
cont++;
}
答案 1 :(得分:0)
此代码有效:
public class MainActivity extends AppCompatActivity {
public int cont = 0;
private TextView campoTexto;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
campoTexto = findViewById(R.id.mytextview);
Timer timer = new Timer();
Handler mainHandler = new Handler(getBaseContext().getMainLooper());
TimerTask task = new TimerTask() {
@Override
public void run() {
mainHandler.post(MainActivity.this::update);
}
};
timer.scheduleAtFixedRate(task, 100, 1000);
}
@MainThread
public void update() {
campoTexto.setText(String.valueOf(cont));
cont++;
}
}
第一个问题是您在int
中使用campoTexto.setText()
,因此它正在寻找具有该ID的字符串。
第二个错误是在后台线程中更改了UI元素,在本例中为campoTexto
。
编辑:
为了使用我的解决方案,您需要在模块中启用Java 8(很可能是app
模块)级别的build.gradle文件,如下所示:
android {
compileSdkVersion 27
defaultConfig {
...
}
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
}
或者你可以使用它:
nHandler.post(new Runnable() {
@Override
public void run() {
update();
}
});
而不是mainHandler.post(MainActivity.this::update);