Android 如何更新循环中的文本视图文本

Android 如何更新循环中的文本视图文本,android,while-loop,textview,Android,While Loop,Textview,我想要一个非常简单的XML布局,其中只有一个文本视图。我希望文本视图每秒上升一个。为此,我使用了以下代码 public class test extends Activity{ TextView num; int to =0; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub su

我想要一个非常简单的XML布局,其中只有一个文本视图。我希望文本视图每秒上升一个。为此,我使用了以下代码

    public class test extends Activity{
    TextView num;
    int to =0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.updatexml);
num = (TextView) findViewById(R.id.tvUpdate);
        startIncrementing();
    }
    public void startIncrementing() {
        while (to < 100) {
            num.setText(to + "");
            to++;
        }
        }
    }
现行代码

public class Test2 extends Activity {

    // Init var
    int i=0;
    TextView num;
    final Handler myHandler = new Handler();
    final Timer myTimer = new Timer();

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

        // Init your TextView
        num = (TextView) findViewById(R.id.tvUpdate);

        // Timer
        TimerTask myTask = new TimerTask() {
            public void run() {
                updateUI(); // updateUI method
            }
        };
        myTimer.schedule(myTask,0,1000); // TimerTask, delay, period
    }

    // Runnable method
    final Runnable myRunnable = new Runnable() {
        public void run() {
            num.setText(String.valueOf(i)); // update your text
        }
    };

    // updateUI method related to a Runnable
    private void updateUI() {
        if(i < 100) {
            i++;
            // num.setText(String.valueOf(i)); = avoid the RunTime error
            myHandler.post(myRunnable); // relate this to a Runnable
        } else {
            myTimer.cancel(); // stop the timer
            return;
        }
    }
}
公共类Test2扩展活动{
//初始化变量
int i=0;
文本视图数;
最终处理程序myHandler=新处理程序();
最终计时器myTimer=新计时器();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化你的文本视图
num=(TextView)findViewById(R.id.tvUpdate);
//计时器
TimerTask myTask=新TimerTask(){
公开募捐{
updateUI();//updateUI方法
}
};
myTimer.schedule(myTask,01000);//TimerTask,delay,period
}
//可运行方法
final Runnable myRunnable=new Runnable(){
公开募捐{
num.setText(String.valueOf(i));//更新文本
}
};
//与Runnable相关的updateUI方法
私有void updateUI(){
如果(i<100){
i++;
//num.setText(String.valueOf(i));=避免运行时错误
myHandler.post(myRunnable);//将其与Runnable关联
}否则{
myTimer.cancel();//停止计时器
返回;
}
}
}

试试倒计时。您可以修改代码,使其上升。可以在此处找到示例:

您应该创建一个与
可运行
相关的
计时器(以避免运行时错误),该计时器每秒更新一次视图:

public class MainActivity extends Activity {

    // Init var
    int i=0;
    TextView num;
    final Handler myHandler = new Handler();
    final Timer myTimer = new Timer();

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

        // Init your TextView
        num = (TextView) findViewById(R.id.textNum);

        // Timer
        TimerTask myTask = new TimerTask() {
            public void run() {
                updateUI(); // updateUI method
            }
        };
        myTimer.schedule(myTask,0,1000); // TimerTask, delay, period
    }

    // Runnable method
    final Runnable myRunnable = new Runnable() {
        public void run() {
            num.setText(String.valueOf(i)); // update your text
        }
    };

    // updateUI method related to a Runnable
    private void updateUI() {
        if(i < 100) {
            i++;
            // num.setText(String.valueOf(i)); = avoid the RunTime error
            myHandler.post(myRunnable); // relate this to a Runnable
        } else {
            myTimer.cancel(); // stop the timer
            return;
        }
    }
}
公共类MainActivity扩展活动{
//初始化变量
int i=0;
文本视图数;
最终处理程序myHandler=新处理程序();
最终计时器myTimer=新计时器();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化你的文本视图
num=(TextView)findViewById(R.id.textNum);
//计时器
TimerTask myTask=新TimerTask(){
公开募捐{
updateUI();//updateUI方法
}
};
myTimer.schedule(myTask,01000);//TimerTask,delay,period
}
//可运行方法
final Runnable myRunnable=new Runnable(){
公开募捐{
num.setText(String.valueOf(i));//更新文本
}
};
//与Runnable相关的updateUI方法
私有void updateUI(){
如果(i<100){
i++;
//num.setText(String.valueOf(i));=避免运行时错误
myHandler.post(myRunnable);//将其与Runnable关联
}否则{
myTimer.cancel();//停止计时器
返回;
}
}
}

感谢其他消息来源所说,唯一的问题是。Eclipse向我发送了一条错误消息,从“.schedule”到“//1”你知道为什么会这样吗?@user2202646你从哪里得到的?你能提供更多关于你的错误的详细信息吗?在“.schedule”下面有一条红线,上面写着“令牌上的语法错误”schedule“,=在这个令牌之后应该是”然后在代码的其他部分下面写着“令牌上的语法错误,应该是ArgumentList”@user2202646我忘记了TimerTask类,我的错误。现在应该可以了。让我知道。这消除了大部分错误,但现在在“myTimer.schedule(myTask,100);”中的1000下有一个错误,即“令牌上的语法错误,应改为VariableDeclarator”
public class MainActivity extends Activity {

    // Init var
    int i=0;
    TextView num;
    final Handler myHandler = new Handler();
    final Timer myTimer = new Timer();

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

        // Init your TextView
        num = (TextView) findViewById(R.id.textNum);

        // Timer
        TimerTask myTask = new TimerTask() {
            public void run() {
                updateUI(); // updateUI method
            }
        };
        myTimer.schedule(myTask,0,1000); // TimerTask, delay, period
    }

    // Runnable method
    final Runnable myRunnable = new Runnable() {
        public void run() {
            num.setText(String.valueOf(i)); // update your text
        }
    };

    // updateUI method related to a Runnable
    private void updateUI() {
        if(i < 100) {
            i++;
            // num.setText(String.valueOf(i)); = avoid the RunTime error
            myHandler.post(myRunnable); // relate this to a Runnable
        } else {
            myTimer.cancel(); // stop the timer
            return;
        }
    }
}