使用循环动态地向表添加新行 - android

时间:2012-06-02 03:40:37

标签: android tablelayout tablerow

我正在尝试为Android安装RSS阅读器。我从webservice获取数据并放入arraylist。然后我在活动类中采用那个arraylist ..我想创建表行和textviews,其数量等于arraylist size.There这里没有问题。但是当我执行应用程序时,所有文本视图都给出相同的结果(arraylist的最后一项) 。所有的arraylist项目都不同。 我期待结果

  

消息[1]
  消息[2]
  新闻[3] ....

但是我得到了

  

消息[20]
  消息[20]
  消息[20]

我有什么不对的。我尝试从for循环中创建textviewview和row实例,但我得到“.IllegalStateException:指定的子节点已经有父节点”异常。 我有一个新闻pojo,这是我的代码。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.guncel);
    WebService ws = new WebService();
    TableLayout tb = (TableLayout) findViewById(R.id.tbl1);

    news news1 = null;
    List<news> newslist;
    URL serviceURL;
    try {
        serviceURL = new URL(
                "http://rss.hurriyet.com.tr/rss.aspx?sectionId=1");
        newslist = ws.getList(serviceURL);
        for (news new1 : newslist) {
            TableRow row = new TableRow(this);
            TextView txtview = new TextView(this);
            row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT));
            news1 = (news) newslist.get(i);
            txtview.setText(new1.getTitle());
            System.out.println(new1.getTitle());
            row.addView(txtview);
            tb.addView(row);
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }

}

好吧我的错...我没仔细查看我的清单。列表中表示对象的所有项目都是相同的。抱歉,这是个糟糕的问题。

1 个答案:

答案 0 :(得分:1)

如果你使用foreach循环,请使用这种方式:

 foreach (news new1 : newslist) {
        TableRow row = new TableRow(this);
        row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
        txtview.setText(new1.getTitle());
        System.out.println(new1.getTitle());
        row.addView(txtview);
        tb.addView(row);
    }

并使用for循环:

for (int i = 0; i < newslist.size(); i++) {
     TableRow row = new TableRow(this);
            row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT));
            news1 = (news) newslist.get(i);
            txtview.setText(new1.getTitle());
            System.out.println(new1.getTitle());
            row.addView(txtview);
            tb.addView(row);
}