簡體   English   中英

在Activity類中調用onConfigurationChanged方法后,將調用onCreate方法

[英]onCreate method is called after calling onConfigurationChanged method in an Activity class

我是android編程的初學者,現在我在一個android應用程序上工作,該應用程序默認情況下按排序順序顯示數據,並且還提供搜索功能。 為此,我編寫了一個名為search的活動,它將搜索內容並顯示在列表視圖中。 我的問題是,當我旋轉設備時,即使覆蓋了onConfigurationChanged方法,也會調用Activity類的onCreate方法。 我還對清單文件進行了以下更改,以調用onConfigurationChanged方法。

<activity
    android:name=".Search"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="sensor" >
</activity>

我的搜索活動如下:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  System.out.println("HERE AT ONCREATE");
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    System.out.println("HERE AT ON CONFIGURATION CHANGED");
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        setContentView(R.layout.search_port);
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setContentView(R.layout.search_land);
    }
}

因此,旋轉設備時的輸出為:

  1. 此處的配置已更改

  2. 在這里在線

我不想在旋轉設備時調用onCreate()方法。 請幫我解決這個問題。 我正在將Android 2.2 SDK與Samsung Galaxy Tab(7英寸顯示屏)配合使用。

您嘗試使用以上代碼完成的任務可以更簡單地完成。

如果將布局文件名更改為相同: search_layout.xml並通過以下方式將它們放置在項目中:

<project>/res/layout/search_layout.xml       // Portrait Layout
<project>/res/layout-land/search_layout.xml  // Landscape Layout

然后以這種方式修改您的活動:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("Search Activity", "onCreate() was called.");
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Log.i("Search Activity", "onConfigurationChanged was called.");
}

這就是我在Activity中設置它的方式,並且onCreate()方法僅被調用一次。

沒有辦法避免它。 旋轉設備時,活動將被殺死並重新創建。 無法避免這種情況,但是您可以重寫onSaveInstanceState(),它將在活動被銷毀之前被調用。

暫無
暫無

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

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