【问题标题】:Progress Dialog in Tab Layout in androidandroid中选项卡布局中的进度对话框
【发布时间】:2012-07-18 10:32:52
【问题描述】:

我正在处理选项卡布局和进度对话框。当用户进入选项卡布局以及用户更改选项卡时,我想显示五秒钟的进度对话框。

我使用以下相同的代码来显示两种情况下的进度对话框。

public class TabLayoutActivity extends TabActivity {
    ProgressDialog progressDialog;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tablayoutview);
        progressDialog = ProgressDialog.show(TabLayoutActivity.this, "",
                "Loading. Please wait...");
        new Thread() {
            public void run() {
                try {
                    Thread.sleep(5000);
                    TabHost tabHost = getTabHost();
                    TabHost.TabSpec tabSpec;
                    Intent intent = new Intent().setClass(
                            getApplicationContext(), FirstTabActivity.class);
                    tabSpec = tabHost.newTabSpec("first").setIndicator("First")
                            .setContent(intent);
                    tabHost.addTab(tabSpec);

                    intent = new Intent().setClass(getApplicationContext(),
                            SecondTabActivity.class);
                    tabSpec = tabHost.newTabSpec("second")
                            .setIndicator("Second").setContent(intent);
                    tabHost.addTab(tabSpec);
                } catch (Exception e) {
                    Log.e("tag", e.getMessage());
                }
                progressDialog.dismiss();
            }
        }.start();
    }
}

进度对话框工作正常,但选项卡的内容不显示。它显示以下错误。

“只有创建视图层次结构的原始线程才能接触其视图”

【问题讨论】:

  • TabActivity 已弃用。您应该改用片段。
  • 您正在向 UI 线程之外的 UI 添加元素。这就是您看到该错误的原因。

标签: android android-layout android-intent android-progressbar


【解决方案1】:

试试这个

public class TabLayoutActivity extends TabActivity {
ProgressDialog progressDialog;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tablayoutview);
    progressDialog = ProgressDialog.show(TabLayoutActivity.this, "",
            "Loading. Please wait...");
    new Thread() {
        public void run() {
            try {
                Thread.sleep(5000);
 TabLayoutActivity .this.runOnUiThread(new Runnable() {

    @Override
    public void run() {
        TabHost tabHost = getTabHost();
                TabHost.TabSpec tabSpec;
                Intent intent = new Intent().setClass(
                        getApplicationContext(), FirstTabActivity.class);
                tabSpec = tabHost.newTabSpec("first").setIndicator("First")
                        .setContent(intent);
                tabHost.addTab(tabSpec);

                intent = new Intent().setClass(getApplicationContext(),
                        SecondTabActivity.class);
                tabSpec = tabHost.newTabSpec("second")
                        .setIndicator("Second").setContent(intent);
                tabHost.addTab(tabSpec);
              progressDialog.dismiss();
    }
});

            } catch (Exception e) {
                Log.e("tag", e.getMessage());
            }

        }
    }.start();
}

}

【讨论】:

    【解决方案2】:

    我的猜测是它在progressDialog.dismiss() 中崩溃,因为您试图从非 UI 线程中删除。为了防止这种行为,你应该像这样在 UI/Main Thread 中运行它:

    runOnUiThread(new Runnable() {
                public void run() {
                    progressDialog.dismiss();
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 2011-05-28
      相关资源
      最近更新 更多