我使用此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),它使用这个函数有很多条目。 在功能完成之前它们都不会显示(并且需要花费很多时间),这使得整个日志无用(没有人需要一个只能在完成所有内容后才能看到的日志)。
所以我的问题是:我怎么能像暂停这个功能那样才能添加文本视图?
答案 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();