addView仅在void end之后显示

时间:2013-07-03 12:32:46

标签: android

我使用此void在类似日志的过程中附加TextViews以将其显示给用户:

static void addlog(Activity innercont, String txt)
    {
        TextView tadd = new TextView(innercont);
        tadd.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        tadd.setText(txt);
        Log.i(TAG,"addlog: "+txt);
        layout.setOrientation(LinearLayout.VERTICAL);
        layout.addView(tadd);

        ScrollView scro = (ScrollView) innercont.findViewById(R.id.ScrollView1);
        scro.removeAllViews();
        scro.addView(layout);

        innercont.setContentView(scro);
    }

我知道大部分事情都没用,但这是我目前的尝试。

问题

首先(MainActivity-onCreate)我使用这个void添加一个初始化条目 - 它可以工作。 之后,我有一个函数(私有类navigata扩展WebViewClient)调用另一个函数(自定义void),它使用这个函数有很多条目。 在功能完成之前它们都不会显示(并且需要花费很多时间),这使得整个日志无用(没有人需要一个只能在完成所有内容后才能看到的日志)。

所以我的问题是:我怎么能像暂停这个功能那样才能添加文本视图?

1 个答案:

答案 0 :(得分:0)

感谢Michael Butscher,我使用Threads解决了这个问题。

因此,我修改了原来的addlog-function,如下所示:

static void addlog(Activity innercont, String txt)
    {
        if (innercont.findViewById(255) != null)
        {
            TextView tadd = (TextView) innercont.findViewById(255);
            String atmtxt = (String) tadd.getText();
            atmtxt = atmtxt+"\n"+txt;
            tadd.setText(atmtxt);
            return;
        }

        TextView tadd = new TextView(innercont);
        tadd.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        tadd.setText(txt);
        tadd.setId(255);

        layout.setOrientation(LinearLayout.VERTICAL);
        layout.addView(tadd);

        ScrollView scro = (ScrollView) innercont.findViewById(R.id.ScrollView1);
        scro.removeAllViews();
        scro.addView(layout);

        innercont.setContentView(scro);
    }

让主要的工作在一个带有自己的addlog-function的线程中进行,该函数使用View.post访问UI而不阻塞它。

final TextView tadd = (TextView) cont.findViewById(255);
        tadd.setText("");
        //Log.i(TAG, "get lists" );

        new Thread(new Runnable() {
            public void addlog2(final Activity cont, final String txt)
            {
                tadd.post(new Runnable() {
                    public void run() {
                        String atmtxt = (String) tadd.getText();
                        atmtxt = atmtxt+"\n"+txt;
                        tadd.setText(atmtxt);
                    }
                });
            }


            public void run() {
                addlog2(cont,"log text");
                                //...
              }
      }).start();