2015-11-05 30 views
2

我在使用onOptionsItemSelected時遇到了Android Studio默認的「設置活動」(其中extends AppCompatPreferenceActivity)的問題。該活動的重要組成部分是:使用onOptionsItemSelected使用PreferenceFragments從PreferenceActivity上移

public class SettingsActivity extends AppCompatPreferenceActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setupActionBar(); 
    } 

    private void setupActionBar() { 
     ActionBar actionBar = getSupportActionBar(); 
     if (actionBar != null) { 
      // Show the Up button in the action bar. 
      actionBar.setDisplayHomeAsUpEnabled(true); 
     } 
    } 

    public static class GeneralPreferenceFragment extends PreferenceFragment { 

     // [...] 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      int id = item.getItemId(); 
      if (id == android.R.id.home) { 
       startActivity(new Intent(getActivity(), SettingsActivity.class)); 
       return true; 
      } 
      return super.onOptionsItemSelected(item); 
     } 
    } 

    // two more fragments 
} 

這對片段的偉大工程 - 對onOptionsItemSelected@Override的工作很好,回到SettingsActivity但我想SettingsActivity將控制返回到其父活動時向上按鈕用來。

我讀過the documentation據我所知,

雖然你的片段收到關於選擇的項目,回調它增加了每個菜單項,該活動是第一次當用戶收到相應的回調選擇一個菜單項。

這意味着我不能簡單地增加一個類似@Override(用不同Intent)到SettingsActivity自己來處理我想,以免碎片返回到上一級的活動,而不是這種情況。

我已經嘗試通過AndroidManifest.xml處理這樣的:

<activity 
    android:name=".SettingsActivity" 
    android:label="@string/title_activity_settings" 
    android:parentActivityName=".BlahBlahActivity" > 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value="com.example.appthing.BlahBlahActivity" /> 
</activity> 

但是這似乎並沒有做任何事情。

如何解決這個問題有什麼好方法?

回答

5

在由Android Studio創建的模板中onOptionsItemSelected方法屬於片段。

我通過評論他們和寫作onOptionsItemSelected方法爲活動首要解決onBackPressed

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == android.R.id.home) { 
     onBackPressed(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

完全爲我工作與Android Studio中生成PreferenceActivitiy。然而,我目前只有一個層次的深度,但我打算至少有2個,所以我現在無法告訴它是否仍然有效。我猜是吧 – xxtesaxx

0

經過幾個無情的搜索網絡幾小時後,我想出了一個我自己的粗糙(但稍微黑客)的解決方案。

我添加一個字段到SettingsActivityprivate boolean inFragment;

在片段onCreate()方法,那麼我加入

((SettingsActivity) getActivity()).inFragment = true; 

最後,我然後用這個@OverrideSettingsActivity

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == android.R.id.home) { 
     if (!inFragment) { 
      Intent upIntent = NavUtils.getParentActivityIntent(this); 
      NavUtils.navigateUpTo(this, upIntent); 
      return true; 
     } 
     return false; 
    } 
    return super.onOptionsItemSelected(item); 
} 

這將適用於我的目的,但我覺得有可能(或應該)ab etter方式。

相關問題