0

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

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

setContentView(R.layout.startup_loaded);

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

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();在可运行的末尾),但它由整个应用程序完成。有谁知道该怎么做?

4

1 回答 1

1

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

于 2012-07-24T10:34:25.763 回答