java - 应用程序运行时每秒更新一次 TextView

标签 java android

我是 Android 编程的新手,但我对 Java 非常熟悉,所以...

在这个应用程序中,我需要创建类似死亡/出生计数器和总人口计数器的东西,所以我需要每秒更新 Activity 中的字符串,但我找不到任何解决方案。

这是我的主要 Activity :

public class MainActivity extends ActionBarActivity {

    static int nasc;
    static int mortes;
    static int popTotal;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        nasc = 0;
        mortes = 0;
        popTotal = 0;
        setContentView(R.layout.activity_main);

        final TextView view = new TextView(this);
        Boolean menu = false;
        Handler handler = new Handler();
        while (menu == false) {
            handler.postDelayed(new Runnable() {
                public void run() {
                    view.setText("Births : " + getNasc() + ".");
                    view.append("\n");
                    view.append("Deaths : " + getMortes() + ".");
                    view.append("\n");
                    view.append("Total Population : " + getPopTotal() + ".");
                    setContentView(view);
                }
            }, 1000);
        }
    }

    private int getPopTotal() {
        popTotal = nasc - mortes;
        return popTotal;
    }

    private int getMortes() {
        mortes = (int) (mortes + 1.7);
        return mortes;
    }

    private int getNasc() {
        nasc = nasc + 3;
        return nasc;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.textView) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

我做错了什么?

最佳答案

您需要做的是删除 while 循环,如果 menu == false 在使用新总数更新 UI 后每秒重新运行 Runnable。

我刚刚通过使 Runnable 成为成员变量而不是匿名类,使用 StringBuilder 为 TextView 构建文本,并在 menu 时重新运行 Runnable 来实现这个实现> 在每次运行完成时仍然为假。

public class MainActivity extends ActionBarActivity {

    static int nasc;
    static int mortes;
    static int popTotal;
    TextView view;
    Handler handler;
    Boolean menu;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        nasc = 0;
        mortes = 0;
        popTotal = 0;
        view = (TextView) findViewById(R.id.text);
        menu = false;
        handler = new Handler();
        handler.postDelayed(updateText, 1000);
    }

    public Runnable updateText = new Runnable() {
        @Override
        public void run() {
            StringBuilder sb = new StringBuilder();
            sb.append("Births : " + getNasc() + ".");
            sb.append("\n");
            sb.append("Deaths : " + getMortes() + ".");
            sb.append("\n");
            sb.append("Total Population : " + getPopTotal() + ".");

            view.setText(sb.toString());

            if (menu == false){
                handler.postDelayed(this, 1000);
            }
        }
    };

    //.................

activity_main.xml:

<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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView android:id="@+id/text" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

关于java - 应用程序运行时每秒更新一次 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152204/

相关文章:

java - 如何在Java中对齐按钮我尝试了一些方法,但在我的代码中不起作用任何线索我要做什么来解决这个问题

java - Android TextView : onClick after Moving TextView

java - 为什么将布局设置为 BorderLayout 意味着永远不会调用 paintComponent

java - 为链接列表或任何类型的列表添加监听器

Android - Proguard 重复 zip 条目错误 - Android 支持库

java - Android Launcher2源码导入

java.util.Function 或 Java 方法,哪一个是最佳实践?

Android:如何做这个框架涂料?

android - Android Studio错误-无法加载类 'com.google.gson.JsonParseException'

android - 在不同的 Android 平台上安装相同的 .apk 文件