使用loop-android将新行动态添加到表中

使用loop-android将新行动态添加到表中,android,tablelayout,tablerow,Android,Tablelayout,Tablerow,我正在尝试为android做rss阅读器。我从webservice获取数据并将其放入arraylist。然后我在活动类中获取该arraylist。我想创建计数等于arraylist大小的表行和文本视图。这里没有问题。但是当我执行应用程序时,所有文本视图都给出相同的结果(arraylist的最后一项)。所有arraylist项都不同。 我期待这一结果 新闻[1] 新闻[2] 新闻[3] 但我明白了 新闻[20] 新闻[20] 新闻[20] 我不明白这有什么不对。我尝试在for循环外创建textvi

我正在尝试为android做rss阅读器。我从webservice获取数据并将其放入arraylist。然后我在活动类中获取该arraylist。我想创建计数等于arraylist大小的表行和文本视图。这里没有问题。但是当我执行应用程序时,所有文本视图都给出相同的结果(arraylist的最后一项)。所有arraylist项都不同。 我期待这一结果

新闻[1]
新闻[2]
新闻[3]

但我明白了

新闻[20]
新闻[20]
新闻[20]

我不明白这有什么不对。我尝试在for循环外创建textview和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();
    }

}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.guncel);
WebService ws=新的WebService();
TableLayout tb=(TableLayout)findViewById(R.id.tbl1);
news1=null;
列表新闻列表;
URL服务URL;
试一试{
serviceURL=新URL(
"http://rss.hurriyet.com.tr/rss.aspx?sectionId=1");
newslist=ws.getList(serviceURL);
对于(新闻1:新闻列表){
TableRow row=新的TableRow(本);
TextView txtview=新的TextView(此);
row.setLayoutParams(新的LayoutParams(LayoutParams.FILL_父级、,
LayoutParams.WRAP_内容);
news1=(news)newslist.get(i);
setText(new1.getTitle());
System.out.println(new1.getTitle());
row.addView(txtview);
tb.addView(行);
}
}捕获(格式错误){
e、 printStackTrace();
}
}


好吧,这是我的错。。我没有仔细核对我的清单。列表中表示对象的所有项都相同。对不起,这个问题不好。

如果您使用的是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);
}
for(int i=0;i
no我得到相同的结果..只删除“news1=(news)newslist.get(i);”。。编辑代码部分,在for loop.ok System.out.println(new1.getTitle())中创建textview;打印相同的标题还是不同的?是的,它会给出相同的结果。但是我控制webservice.class,这里有所有不同的列表项。