0

一旦按下菜单中的按钮,我希望 TextView 中的文本不断更改。这是我的菜单的 onOptionsItemSelected:

public boolean onOptionsItemSelected(MenuItem item) {


    switch(item.getItemId()){
    case R.id.menu_animate:
        for(int i=0;i<100;i++){
            MessageIn.setText("here"+i);
        }
        break;

    }

  return super.onOptionsItemSelected(item);
}

如您所见,如果 onOptionsItemSelected 认为在菜单中按下了“menu_animate”按钮,它会继续修改我的 TextView 中名为“MessageIn”的文本。

我试图让它重复显示一些数字从 0 到 99 的文本。但是,当我运行应用程序并按下按钮时,我只看到我的 TextView 中显示“here99”。所以看起来所有代码在显示最终结果之前都已执行。

每次更新我的数字时,如何让它刷新 TextView 中的显示?

谢谢。

4

2 回答 2

1

您可以将 aHandler和 aRunnable用于您的目的。我正在分享一个我目前使用的编辑代码,就像你的目的一样。

可以直接复制类和布局,然后试试。

主要思想是使用Handler带有它的 apostpostDelayed带有 a 的方法Runnable。当您按下按钮时,它开始每 3 秒更改一次文本。如果再次按下按钮,它会自行重置。

试试这段代码,试着理解它。Handlers 可用于多种目的来更改 UI。阅读更多关于它的信息。

MainActivity.java:

public class MainActivity extends Activity {

    private Handler handler;
    private TextView textView;

    private TextUpdateRunnable textUpdateRunnable;

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

        handler = new Handler();

        textView = (TextView)findViewById(R.id.textView);

        Button startButton = (Button)findViewById(R.id.button);
        startButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if(textUpdateRunnable != null) {
                 handler.removeCallbacks(textUpdateRunnable);
                }
                TextUpdateRunnable newTextUpdateRunnable = new TextUpdateRunnable(handler, textView); 
                textUpdateRunnable = newTextUpdateRunnable;
                handler.post(textUpdateRunnable);
            }
        });
    }

    private static class TextUpdateRunnable implements Runnable {
        private static final int LIMIT = 5;

        private int count = 0;
        private Handler handler;
        private TextView textView;

        public TextUpdateRunnable(Handler handler, TextView textView) {
            this.handler = handler;
            this.textView = textView;
        }

        public void run() {
            if(textView != null) {
                textView.setText("here" + count);
                count++;

                if(handler != null && count < LIMIT) {
                    handler.postDelayed(this, 3000);
                }
            }
        }
    };
}

活动主.xml:

<LinearLayout 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:orientation="vertical" >

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="BUTTON" />

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

</LinearLayout>
于 2013-11-13T20:55:14.093 回答
0

请参阅此答案https://stackoverflow.com/a/3039718/2319589如何使用SleepwithRunnable()并以这种方式实现您的代码。

应该管用。

祝你好运 :)

于 2013-11-13T20:28:14.533 回答