【问题标题】:Static and dynamic text view adding simultaneously in android在android中同时添加静态和动态文本视图
【发布时间】:2013-08-20 06:04:34
【问题描述】:

我正在android中同时添加一个静态和动态文本视图。但是代码中有问题..它只是添加了数组的最后一个元素..您能帮我解决一下吗?

dynamicInput = (String[]) data;
        runOnUiThread(new Runnable() {
            public void run() {

                String[] string = { "Customer Mobile No :", "Nick Name :",
                        "Amount :", "Due date :" };
                LinearLayout findViewById = (LinearLayout) findViewById(R.id.dynamicInputbiller);
                TextView dynamicText = new TextView(PayBiller_Activity.this);
                TextView staticText = new TextView(PayBiller_Activity.this);
                for (int i = 0; i < string.length; i++) {

                    staticText.setText(string[i]);

                    staticText.setTextColor(Color.BLACK);
                    staticText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 17);

                    dynamicText.setText(dynamicInput[i]);

                    dynamicText.setTextColor(Color.GRAY);
                    dynamicText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);
                }
                findViewById.addView(staticText);
                findViewById.addView(dynamicText);

            }
        });

【问题讨论】:

  • 你为什么要循环 for (int i = 0; i
  • 没有循环如何在布局中添加数组元素?
  • 好的,我发布了我的答案检查它..

标签: android dynamic static android-linearlayout


【解决方案1】:

实际上问题是不同的。您正在做的是在单个 TextView 中添加数组的元素。当您在循环中执行此操作时,它只获取最后一个元素并在文本视图中获取它。做一件事取父布局的ID(线性/相对)。

循环内

创建一个 Textview 并为其添加一个值(您正在执行的方式,如 setText、setTextSize 等)。并在循环中将其添加到其父布局中。

这可能会对你有所帮助。

【讨论】:

  • 当您发布答案时会通知OP...无需在每次您回答时都在问题下发表评论...
【解决方案2】:

把它放在你的 for 循环中。

findViewById.addView(staticText);
findViewById.addView(dynamicText);

【讨论】:

  • 感谢您的回复,但是如果我将它们添加到 for 循环中会崩溃。
  • 你能发布你的日志猫吗?
  • 我收到这样的错误.....java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()。
【解决方案3】:

试试这个:

dynamicInput = (String[]) data;
        runOnUiThread(new Runnable() {
            public void run() {

                String[] string = { "Customer Mobile No :", "Nick Name :",
                        "Amount :", "Due date :" };
                LinearLayout findViewById = (LinearLayout) findViewById(R.id.dynamicInputbiller);

                for (int i = 0; i < string.length; i++) {
                    TextView dynamicText = new TextView(PayBiller_Activity.this);
                    TextView staticText = new TextView(PayBiller_Activity.this);
                    staticText.setText(string[i]);

                    staticText.setTextColor(Color.BLACK);
                    staticText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 17);

                   dynamicText.setText(dynamicInput[i]);

                    dynamicText.setTextColor(Color.GRAY);
                    dynamicText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);

                    findViewById.addView(staticText);
                    findViewById.addView(dynamicText);
                }


            }
        });

【讨论】:

  • 感谢您的回复,但是如果我将它们添加到 for 循环中会崩溃。
  • 我收到这样的错误.....java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()。
  • @Parinita findViewById (dynamicInputbiller) 在 xml 中是否已经有子视图?
  • 这是我的 XML
  • @Parinita 您确定将这些行添加到循环内吗? TextView dynamicText = new TextView(PayBiller_Activity.this); TextView staticText = new TextView(PayBiller_Activity.this);再看看我的代码..
【解决方案4】:

如果您想将所有数组元素设置为您的 textView,那么您必须在每次迭代时附加它。现在你没有这样做。因此你只得到最后一个数组元素。

注意:还要确保您的字符串数组 dynamicInput 和 staticText 的字符串数组具有相同数量的元素,这样您就不会得到索引超出范围异常,或者在将其分配给 TextView 时可能会丢失一些元素。

我给你的“字符串”数组起了其他名字。它的“staticStringArray”。

dynamicInput = (String[]) data;
    runOnUiThread(new Runnable() {
        public void run() {

            String[] staticStringArray= { "Customer Mobile No :", "Nick Name :","Amount :", "Due date :" };
            LinearLayout findViewById = (LinearLayout) findViewById(R.id.dynamicInputbiller);
            TextView dynamicText = new TextView(PayBiller_Activity.this);
            TextView staticText = new TextView(PayBiller_Activity.this);
            for (int i = 0; i < staticStringArray.length; i++) {

                //append each element of the array on each iteration. 
                staticText.setText(staticText.getText().toString() + staticStringArray[i] + "\n");

                staticText.setTextColor(Color.BLACK);
                staticText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 17);

                //append each element of the array on each iteration. 
                dynamicText.setText(dynamicText.getText().toString() + dynamicInput[i] + "\n");

                dynamicText.setTextColor(Color.GRAY);
                dynamicText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);
            }
            findViewById.addView(staticText);
            findViewById.addView(dynamicText);

        }
    });

【讨论】:

  • 两者的 Array 元素是相同的..我收到这样的错误.....java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()。
  • 您似乎已经接受了答案。我已经测试了上面的代码并且它可以工作。那个非法状态异常可能是出于其他原因。无论如何,编码愉快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多