簡體   English   中英

Android顯示白屏,直到Asynctask啟動,但我已經加載了布局

[英]Android displaying white screen until Asynctask starts but I have already loaded a layout

因此,我有以下代碼和一個問題:它應該加載一個布局,該布局應顯示“正在下載數據庫...”(動態添加到布局中),但是在更新數據庫之前出現白屏,然后繼續進行處理add_categories_layout(0)並正常工作。

如何獲得顯示第一個布局的信息?

受保護的void onResume(){

    super.onResume();
    setContentView(R.layout.home_screen_layout);
    SF = (LinearLayout) findViewById(R.id.SF);
    p_db_adapter = new DBAdapterProducts(getApplicationContext());
    c_db_adapter = new DBAdapterCategories(getApplicationContext());
    add_downloading_DB_layout();

    new UpdateDB().execute(CATEGORY_URL, PRODUCTS_URL, TIMESTAMP_URL_CATEGORIES, TIMESTAMP_URL_PRODUCTS);       
    while(DBupdated == false){}
    add_categories_layout(0);

}

您應該將setContentView放在onCreate()onCreateView()

我們還能看到布局的動態添加嗎?

在onResume完成之前,它不會繪制屏幕,​​而在DBUpdated為true之前,onResume將不會完成(此時交換布局)。

通常,您可以在oncreate()方法中設置contentview。 那里可能有代碼,導致它無法正常工作。 如果您沒有Oncreate方法,請制作一個並在其中復制/粘貼此代碼。

您可以放置add_categories_layout(0); AsyncTaskonPostExecute() ,因為它運行在UI Thread 因此,當您的任務完成時,它將運行此方法, onResume()可以完成所需的工作。 如果您的AsyncTask是一個內部類,那么您將有權訪問Activity方法和成員變量。 如果它是一個單獨的文件,則只需將其Activity的引用傳遞給它以調用該方法。

如果需要, 這里有幾個答案可以幫助您。

正如其他人所說, setContentView()通常是在onCreate()完成的,以確保它是運行的第一批內容之一,但這不是問題。 但是,除非您有理由將其放在onResume() ,否則我將其移到那里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM