1分钟后动态添加行到android表

时间:2017-01-10 20:38:33

标签: android android-layout

的xml:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_table"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</TableLayout>

活动示例代码:

public class SecondActivity extends Activity {

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

        TableLayout tl = (TableLayout) findViewById(R.id.main_table);

        TableRow trHead = new TableRow(this);
        trHead.setId(10);
        trHead.setBackgroundColor(Color.GRAY);
        trHead.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT));

        TextView col1Header = new TextView(this);
        col1Header.setText("Time");
        col1Header.setTextColor(Color.CYAN);
        trHead.addView(col1Header);

        TextView col2Header = new TextView(this);
        col2Header.setText("Company");
        col2Header.setTextColor(Color.CYAN);
        col2Header.setGravity(Gravity.END);
        trHead.addView(col2Header);

        tl.addView(trHead, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

        for (int i = 0; i < 3; i++) {

            TableRow row = new TableRow(this);
            row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                    LayoutParams.MATCH_PARENT));

            TextClock clock = new TextClock(this);
            row.addView(clock);

            TextView data = new TextView(this);
            data.setText("dev" + 1);
            data.setGravity(Gravity.END);
            row.addView(data);

            tl.addView(row, new TableLayout.LayoutParams(
                    LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

            SystemClock.sleep(1000);
        }
      }
    }
}

SystemClock.sleep(1000);无法满足我的需求。

整个表在3秒后在UI上显示。但我希望在UI上1分钟后添加行。

3 个答案:

答案 0 :(得分:0)

3秒后全表apper,因为SystemClock.sleep接收miliseconds作为参数。 (1分钟= 60000毫秒)。

另一种方法是使用Runnable

    Runnable r = new Runnable() {
        public void run() {
            //Add row
        }
    };

调用runnable:

Handler handler = new Handler();
handler.postDelayed(r, 60000);

答案 1 :(得分:0)

问题是你在onCreate()内睡觉了。这会阻止UI线程,因此只有 sleep()返回后才能呈现任何内容。这意味着数据库将立即更新和呈现。要执行实际延迟,您需要使用某种类型的并发。在最低级别,您可以创建新的ThreadRunnable。在更高级别,您可以使用AsyncTask。还有更高级别的抽象可用,但这两个选项应该让你开始正确的方向。

答案 2 :(得分:0)

for(int i=1;i<=3;i++){
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //add row
                    }
                });
            }
        },i*60000);
}