代码之家  ›  专栏  ›  技术社区  ›  Zeus

自动复选框列表,5秒。安卓延迟

  •  0
  • Zeus  · 技术社区  · 14 年前

    我想在Android中显示自动检查表。例如,我可以有4个带有未选中复选框的项目列表。

    5秒后。延迟我要检查第一个项目,然后转到第二个。在20秒结束时。我应该一个接一个地勾选这4个复选框。

    知道我该怎么做吗?我可以使用列表视图,复选框opeion..对吗??

    我是一个.NET程序员,这对我来说是一种新的体验,所以任何评论/建议都会受到赞赏。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Cristian    14 年前

    下面是我刚刚写的一个基本示例:

    public class AutoChecker extends Activity {
        private CheckBox checkbox1;
        private CheckBox checkbox2;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            checkbox1 = (CheckBox) findViewById(R.id.checkbox_1);
            checkbox2 = (CheckBox) findViewById(R.id.checkbox_2);
    
            new CheckerAsync(AutoChecker.this).execute(checkbox1, checkbox2);
        }
    
        private class CheckerAsync extends AsyncTask<CheckBox, CheckBox, Void>{
            private Activity mActivity;
    
            private CheckerAsync(Activity activity) {
                mActivity = activity;
            }
            @Override
            protected Void doInBackground(final CheckBox... checkboxes) {
                try {
                    for(int i = 0, j = checkboxes.length; i < j; i++ ){
                        Thread.sleep(5000);
                        publishProgress(checkboxes[i]);
                    }
                } catch (InterruptedException e) {}
                return null;
            }
    
            @Override
            public void onProgressUpdate(final CheckBox... checkboxes){
                mActivity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        checkboxes[0].setChecked(true);
                    }
                });
            }
        }
    }
    

    这是XML布局:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <CheckBox
        android:id="@+id/checkbox_1"  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Checkbox 1"
        />
    <CheckBox
        android:id="@+id/checkbox_2"  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Checkbox 2"
        />
    </LinearLayout>
    

    解释

    它使用一个扩展 AsyncTask 它允许您以易于使用/理解的方式使用线程。这个类的执行方式有点简单:

    new CheckerAsync(AutoChecker.this).execute(checkbox1, checkbox2);
    

    您可以添加任意多的复选框。例如:

    new CheckerAsync(AutoChecker.this).execute(checkbox1, checkbox2, checkbox4, checkbox3);
    

    顺便说一下,我不知道你为什么要这么做。但是,如果是出于测试目的,您最好看一下 instrumentation framework .

        2
  •  0
  •   Mathias Conradt    14 年前

    对于带有延迟的自动检查,您应该使用异步任务,例如可以在Android主UI线程中修改内容的线程,例如检查复选框。

    http://developer.android.com/resources/articles/painless-threading.html

    http://www.xoriant.com/blog/mobile-application-development/android-async-task.html

    http://developer.android.com/reference/android/os/AsyncTask.html

    复选框可以是ListView的一部分,但不必是。还可以将它们逐个添加到垂直方向的线性布局中。