【问题标题】:How can i add table row in table layout?如何在表格布局中添加表格行?
【发布时间】:2014-04-08 18:56:26
【问题描述】:

这里我引用了代码link

我必须在运行时添加多个 textviews,也许它可以工作,但 textviews 没有显示,我必须在表格布局中添加表格行并显示 textview。但它不起作用。

这是我的代码:

tx[i] = new TextView(S1.this);

                    tx[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
                    tx[i].setText(name);

                    tr[i] = new TableRow(S1.this);
                    tr[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
                    tr[i].addView(tx[i]);
                    rl.addView(tr[i]); // Exception

这里抛出异常,应用停止工作。

这是我的日志:

04-08 02:13:05.255: E/AndroidRuntime(1716): FATAL EXCEPTION: AsyncTask #1
04-08 02:13:05.255: E/AndroidRuntime(1716): Process: com.app.crossdine, PID: 1716
04-08 02:13:05.255: E/AndroidRuntime(1716): java.lang.RuntimeException: An error occured while executing doInBackground()
04-08 02:13:05.255: E/AndroidRuntime(1716):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
04-08 02:13:05.255: E/AndroidRuntime(1716):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
04-08 02:13:05.255: E/AndroidRuntime(1716):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
04-08 02:13:05.255: E/AndroidRuntime(1716):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
04-08 02:13:05.255: E/AndroidRuntime(1716):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
04-08 02:13:05.255: E/AndroidRuntime(1716):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-08 02:13:05.255: E/AndroidRuntime(1716):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-08 02:13:05.255: E/AndroidRuntime(1716):     at java.lang.Thread.run(Thread.java:841)
04-08 02:13:05.255: E/AndroidRuntime(1716): Caused by: java.lang.NullPointerException
04-08 02:13:05.255: E/AndroidRuntime(1716):     at com.app.crossdine.S1$Getitems.doInBackground(S1.java:155)
04-08 02:13:05.255: E/AndroidRuntime(1716):     at com.app.crossdine.S1$Getitems.doInBackground(S1.java:1)
04-08 02:13:05.255: E/AndroidRuntime(1716):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
 04-08 02:13:05.255: E/AndroidRuntime(1716):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)

请指导我。

【问题讨论】:

  • 抛出了什么异常?请张贴logcat
  • 你的代码中的 rl 是什么?
  • 这不是您正确的 logcat,我们可以从中解决您的问题。发布完整的 logcat。
  • rl是relativelayout的对象
  • 完成完整的 logcat @PiYusHGuPtA

标签: android


【解决方案1】:

借助问题中提供的链接以及以下link,您可以像下面一样使用它(确保rl 正确指向您要添加此表的布局/视图)。

更新:由于您使用的是 AsyncTask,因此您无法在此方法中修改 UI 内容。我在 onPostExecute 方法中做了。此外,您应该使用TableRow.LayoutParams 设置TextView 的布局参数。下面是我的工作代码

首先将以下内容添加到我的 xml 布局中的按钮中

android:onClick="addTable" 

然后添加下面的java活动

public void addTable(View view){
    CreateTableTask mTask = new CreateTableTask();
    mTask.execute();
}

public class CreateTableTask extends AsyncTask<Void, Void, TableLayout> {
@Override
protected TableLayout doInBackground(Void... params) {
    LayoutParams params1 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                    LayoutParams.WRAP_CONTENT);
    TableLayout layoutINNER = new TableLayout(MainActivity.this);
    layoutINNER.setLayoutParams(params1);
    TextView[] tx = new TextView[10];
    TableRow[] tr = new TableRow[10];
    for(int i=0; i<10; i++) {
        tx[i] = new TextView(MainActivity.this);
        tx[i].setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    tx[i].setText("Data");
    tr[i] = new TableRow(MainActivity.this);
    tr[i].setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    tr[i].addView(tx[i]);
    // and then adding table row in tablelayout
    layoutINNER.addView(tr[i]);
    }
    return layoutINNER;
}

@Override
protected void onPostExecute(final TableLayout newTable) {
    if (newTable!=null) {
            // this rl is the layout where I want this table
        View rl= findViewById(R.id.mainlayout);
        ((ViewGroup) rl).addView(newTable);             
    } 
}       
}    

【讨论】:

  • 当我写下一行 layoutINNER.addView(tr[i]);它在该行上给了我与上面相同的例外
  • @kittu,您是在 asynctask 的 doInBackground 方法中添加此视图吗?
  • 我在 asynctask 中实现了同样的事情,没有问题。查看更新的代码,看看您是否可以从中做出任何事情。 @kittu
  • 我找不到 r.id.RelativeLayout ?我该怎么办?@user1226136
  • 在 xml 布局中确保您定义了 id 标签(例如,在我的情况下,我将以下属性添加到我选择的线性布局 android:id="@+id/mainlayout" )然后您应该能够在您的代码。
猜你喜欢
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多