运行线程后设置新的内容视图

时间:2012-07-24 10:26:32

标签: android multithreading view

我正在为下载和解析某些数据的应用程序创建启动活动。在加载时我想查看我的startup_loading.xml文件,其中包含一个进度条和一个设置为“loading”的textview。 我在启动时需要做的一切都放在一个线程,即startUp线程中。运行此线程后,数据被加载,然后我想显示一个新视图:startup_loaded.xml,其中包含两个按钮,可以将您发送到应用程序中的不同活动。

但我在使用两个视图并在我想要的时候显示它们时遇到了麻烦。 我想如果我把

  

的setContentView(R.layout.startup_loaded);

在我的线程的runnable结束时它会工作,但我得到一个错误,这是不可能的

  

CalledFromWrongThreadException:仅创建的原始线程   视图层次结构可以触及其视图。

我以为我可以这样修理它:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    startUp.start();
    String language =  Locale.getDefault().getISO3Language();
    if (startUp.isAlive()) {
        setContentView(R.layout.startup_loading);
        tv1=(TextView)findViewById(R.id.tvloading);
        if(language.equals("nld")) {
            tv1.setText("bijwerken");
        } else {
            tv1.setText("loading");
        }
        pbar=(ProgressBar)findViewById(R.id.progressBar1);
        pbar.setVisibility(1);
    } else {
        setContentView(R.layout.startup_loaded); 
    }
}
Thread startUp= new Thread() {
    public void run() {
        // all the loading
    }
};

但这也不起作用:我的startup_loaded从未出现过。 我尝试完成我的线程(finish();在runnable的末尾),但它完全由app完成。谁知道该怎么办?

1 个答案:

答案 0 :(得分:1)

使用Handler对象。或者,使用AsyncTask并在onPostExecute()方法中设置新内容。