2011-02-17 60 views
4

我有一個菜單來顯示我的PreferenceActivity。在我的孩子偏好屏幕中,我失去了該菜單(不彈出)。我怎樣才能使我的菜單也爲孩子彈出?將菜單添加到子選項屏幕

謝謝。

例子:

<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:persistent="true"> 
    <PreferenceCategory 
    android:title="some category" 
    android:persistent="true" 
    android:orderingFromXml="true"> 
    <PreferenceScreen 
     android:title="some child screen" 
     android:summary="some child summary"> 
     <PreferenceCategory 
     ... 

第一個首選項屏幕上有菜單,但是當你點擊一個孩子,沒有菜單。你怎麼添加菜單?

回答

1

我面臨類似的問題。這是我爲解決這個問題所做的。

在preferenceActivity onCreate方法,

 final PreferenceScreen childPref = (PreferenceScreen) findPreference("childPrefId"); 
     childPref .setOnPreferenceClickListener(new OnPreferenceClickListener() { 

      @Override 
      public boolean onPreferenceClick(Preference preference) 
      { 
       Intent intent = new Intent(PreferenceActivity.this, YourSettings.class); 
       intent.setAction("ShowChildPref"); 
       startActivity(intent);      
       return true; 
      } 
     }); 

     Intent intent = getIntent(); 
     if(intent.getAction() != null && intent.getAction().equals("ShowChildPref")) 
     {     
      setPreferenceScreen(childPref); 

      /*Set Flags here based on intent what kind of menu to create in OnPrepareMenu.*/ 
     } 
    } 
+0

奇怪的是,我們需要這樣做事情... – ekawas 2011-04-01 18:32:03

-1

您必須在每個可能想要使用菜單按鈕調出菜單的課程中添加菜單的代碼。僅僅因爲其他活動在後臺並不意味着菜單將會啓動。它需要設置在每個將需要菜單並且需要菜單的課程中。

+0

也許我不是清楚......我有一個PreferenceActivity是膨脹來自XML的偏好(並且包含兒童偏好屏幕等)。該活動創建菜單,但是當您單擊首選項屏幕中包含的首選項時,它沒有任何菜單項。我可以在XML中指定包含父菜單(看起來並沒有看到我可以,所以可能不會)? – ekawas 2011-02-17 20:17:09

3

我有更好的解決方案,因爲素里亞的從孩子的PreferenceScreen的雙重表現受到影響。

對於孩子PreferenceScreen我使用相同的PreferenceActivity。因此,在第一次對一個孩子PreferenceScreen,我們想用我們在onCreate方法設置意圖我們PreferenceActivity選項菜單:在如果我們的PreferenceActivity開始有額外的標誌,我們檢測到同樣的onCreate方法後

ourPreferenceScreen = (PreferenceScreen) findPreference("our_preference_screen"); 
if (ourPreferenceScreen != null) { 
    Intent intent = new Intent(this, PreferenceActivity.class); 
    intent.putExtra("ShowOurPreferenceScreen", true); 
    ourPreferenceScreen.setIntent(intent); 
} 

然後。如果是這樣,我們切換到想要PreferenceScreen:

if (getIntent().getBooleanExtra("ShowOurPreferenceScreen", false)) { 
    setPreferenceScreen(ourPreferenceScreen); 
    return; 
} 

,並在結束時,我們喊得onCreateOptionMenu等相關選項菜單的方法是這樣的:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    if (getPreferenceScreen().equals(ourPreferenceScreen)) { 
     // your menu code 
     return true; 
    } 
    return super.onCreateOptionsMenu(menu); 
} 
相關問題