简单时钟显示上升数字

时间:2018-04-27 12:39:25

标签: java android xml

我只想弄清楚如何在文本字段中显示上升数字。

所以我尝试了这个,它编译但快速崩溃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++;
}
}

2 个答案:

答案 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);