【问题标题】:Can not use setContentView from AsyncTask不能从 AsyncTask 使用 setContentView
【发布时间】:2015-10-01 11:49:59
【问题描述】:

我正在尝试通过 AsyncTask 更改我的 Activity 的布局。

在 onPostExecute() 我正在调用:

MyActivity.this.setContentView(R.layout.activity_sub);

但它不会让我说“MyActivity 不是封闭类”。

有人可以帮忙吗?

【问题讨论】:

  • 你在哪里调用和实现AsynkTask?您可以给 AsyncTask 活动作为回调,然后调用 setContentView()。
  • 也许这可以帮助你:stackoverflow.com/questions/14116415/…
  • 如果您将 AsyncTask 类嵌入为活动的内部类,它应该可以工作。

标签: android android-asynctask setcontentview


【解决方案1】:

不应该需要“MyActivity.this.”;以下对我有用:

public class MyAsyncTask extends AsyncTask<Void, Void, Integer> {

    @Override
    protected Integer doInBackground(Void... params) {
        return R.layout.activity_home;
    }

    @Override
    protected void onPostExecute(Integer result) {
        super.onPostExecute(result);

        setContentView(result);
    }
}

【讨论】:

    【解决方案2】:

    我认为这是在 rutime 中更改活动布局的错误方法。如果您想显示具有另一种布局的屏幕,您应该使用片段或创建另一个活动并在那里设置您的布局。

    【讨论】:

      【解决方案3】:

      如果您将AsyncTask 类嵌入活动的内部类,它应该可以工作。

      public class MyActivity extends Activity {
          ...
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
          }
      
          ...
          public class MyAsyncTask extends AsyncTask<Void, Void, ...> {
      
              @Override
              protected ... doInBackground(Void... params) {
                  ...
              }
      
              @Override
              protected void onPostExecute(... result) {
                  super.onPostExecute(result);
                  setContentView(R.layout.activity_sub);
              }
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        • 1970-01-01
        • 2011-04-06
        • 1970-01-01
        相关资源
        最近更新 更多