Android TextView循环添加文本

3

我有问题在于无法在文本视图中显示值。它仅显示文本视图中的最后一个值。我想要迭代每个值并在新行中显示。

这是我的代码:

PreviewCatNameTxt = new TextView[obdatin.catCount];
        PreviewNameTxt = new TextView[10];
        PreviewQtyTxt = new TextView[10];
        PreviewAmtTxt = new TextView[10];
        System.out.println("setview3");
        for(int i=0;i<obdatin.catCount;i++){ 
            System.out.println("num oof prca"+obdatin.catList[i].getNumCategory());
            if(obdatin.catList[i].isTotQtyNonZero(0)){
                PreviewCatNameTxt[i] = (TextView) findViewById(R.id.textViewh);

                PreviewCatNameTxt[i].setText(obdatin.catList[i].getCategoryName(0));
                System.out.println("prca"+obdatin.catList[i].getCategoryName(0));
            }
            int cnt =obdatin.catList[i].proList.getNumProduct();
        System.out.println("setview3");

        for(int j = 0; j<cnt; j++) {

            if(obdatin.catList[i].proList.isQtyNonZero(j)){

                PreviewNameTxt[j] = (TextView)findViewById(R.id.textView1);
                PreviewNameTxt[j].setText(obdatin.catList[i].proList.getProductName(j));

                PreviewQtyTxt[j] = (TextView)findViewById(R.id.textView2);

                PreviewQtyTxt[j].setText(obdatin.catList[i].proList.getProductQty(j));

                PreviewAmtTxt[j] = (TextView)findViewById(R.id.textView3);
                String amt = obdatin.catList[i].proList.getProductAmt(j);
                PreviewAmtTxt[j].setText(amt);
                System.out.println("prcaN"+obdatin.catList[i].proList.getProductName(j));
                System.out.println("prcaQ"+obdatin.catList[i].proList.getProductQty(j));
                System.out.println("prcaA"+obdatin.catList[i].proList.getProductAmt(j));
             }

        }

请查看我的答案。我认为你的问题会得到解决。如果您有任何进一步的疑问,请随时向我提问。 - Satyaki Mukherjee
4个回答

3

根据您的要求编辑后的代码

PreviewCatNameTxt = (TextView) findViewById(R.id.textViewh);


for(int i=0;i<obdatin.catCount;i++){ 
            System.out.println("num oof prca"+obdatin.catList[i].getNumCategory());
            if(obdatin.catList[i].isTotQtyNonZero(0)){


                PreviewCatNameTxt.append(" "+obdatin.catList[i].getCategoryName(0));
                System.out.println("prca"+obdatin.catList[i].getCategoryName(0));
            }
            int cnt =obdatin.catList[i].proList.getNumProduct();
        System.out.println("setview3");

        for(int j = 0; j<cnt; j++) {

            if(obdatin.catList[i].proList.isQtyNonZero(j)){


                   PreviewCatNameTxt.append("\n"+obdatin.catList[i].proList.getProductName(j));

                PreviewCatNameTxt.append("\n"obdatin.catList[i].proList.getProductQty(j));

                String amt = obdatin.catList[i].proList.getProductAmt(j);
                PreviewCatNameTxt.append("\n"+amt+"\n\n");
                System.out.println("prcaN"+obdatin.catList[i].proList.getProductName(j));
                System.out.println("prcaQ"+obdatin.catList[i].proList.getProductQty(j));
                System.out.println("prcaA"+obdatin.catList[i].proList.getProductAmt(j));
             }

请删除TextView数组以及所有相关内容。请回复您的反馈意见。


这里的textview是一个数组,我该如何在循环外声明它? - Abdul Naseer
实际上你的代码是可以工作的,但是在我循环之前设置了一个变量。从那个循环中,我获取标题,然后进入j循环打印项目,再次想要打印标题和项目...现在的问题是先打印所有标题,然后再打印所有项目。 - Abdul Naseer
哎呀,我觉得你犯了一点小错误,请将所有TextView声明在任何循环之外,然后测试它。还有一件事,避免使用settext。但是你选择了不同的TextView,所以它总是会显示一个TextView的内容,然后是另一个,然后……所以你的问题仍然存在。 - Satyaki Mukherjee
谢谢你的帮助,兄弟!!我终于搞定了。 - Abdul Naseer
1
太棒了兄弟,我使用了TableLayout。 - Abdul Naseer
显示剩余5条评论

1
我不确定你想要做什么。为什么要使用 System.out.println
如果我理解正确,您想要在每次循环后将较大的文本放置在 TextView 中,并用换行符分隔。一种方法是使用一个 String,在每次迭代时填充它,并在每次迭代后添加一个换行符,在 for 循环后设置文本。
因此,您可以像这样编写代码:
String catList="";
for(int i=0;i<obdatin.catCount;i++){
        if(obdatin.catList[i].isTotQtyNonZero(0)){
        catList = catList + obdatin.catList[i].getCategoryName(0) + "\n";
        }
int cnt =obdatin.catList[i].proList.getNumProduct();

PreviewCatNameTxt[i] = (TextView) findViewById(R.id.textViewh);
PreviewCatNameTxt[i].setText(catList);

此外,如果您想记录某些内容,应该使用LogCat。您可以在这里这里阅读有关在LogCat中读写的信息。 祝好运!

我想展示输出,第一行是标题,下一行是n行数据,再次出现标题和下一行n行数据。实际上,我使用了表格布局来实现这个目标,但是失败了。所以我选择了这种方式,请问你能给我提供一些建议吗? - Abdul Naseer

1
PreviewNameTxt[j] = (TextView)findViewById(R.id.textView1);
PreviewQtyTxt[j] = (TextView)findViewById(R.id.textView2);
PreviewAmtTxt[j] = (TextView)findViewById(R.id.textView3);
String cat="",obtaincat="",amt="";

for(int j = 0; j<cnt; j++) {

            if(obdatin.catList[i].proList.isQtyNonZero(j)){

                cat = cat + obdatin.catList[i].getCategoryName(j) + "\n";
                obtaincat=btaincat+obdatin.catList[i].proList.getProductQty(j)+"\n";
               amt =amt+ obdatin.catList[i].proList.getProductAmt(j)+"\n";
             }
}
PreviewNameTxt[j].setText(cat);
PreviewQtyTxt[j].setText(obtaincat);
PreviewAmtTxt[j].setText(amt);

请勿使用 System.out.println();,而应使用 toast 进行输出检查。 - learner

-1

切换到 Logcat:

Log.w("","prcaN"+obdatin.catList[i].proList.getProductName(j));
Log.w("","prcaQ"+obdatin.catList[i].proList.getProductQty(j));
Log.w("","prcaA"+obdatin.catList[i].proList.getProductAmt(j));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接