-2

我使用这个 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),该函数有很多使用此函数的条目。在函数完成之前,它们都不会显示(这需要很长时间),这使得整个日志毫无用处(没有人需要只有在一切完成后才能看到的日志)。

所以我的问题是:我怎样才能做某事像暂停功能以便可以添加文本视图?

4

1 回答 1

0

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

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

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 函数的线程中完成,该函数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();
于 2013-07-05T11:05:36.783 回答