2016-09-17 60 views
2

我有一個SettingsActivity,其頂部欄上包含一個「向上」按鈕。我的AettingsActivity也有標題,加載適當的設置片段。默認情況下,當我按頂部欄「向上」按鈕時,它關閉可見片段並返回到標題,並在標題視圖上按下時關閉活動。不過,我的手機「後退」按鈕的作用不同 - 它只是關閉活動。我如何使「向上」箭頭和後退按鈕以同樣的方式工作以保持我的應用程序一致?我是否應該將onBackPressed添加到我的活動中,如果是,我應該在那裏放些什麼?處理SettingsActivity onBackpressed()與頂部酒吧後退按鈕的方式相同

我SettingsActivity:

public class SettingsActivity extends AppCompatPreferenceActivity { 


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


private void setupActionBar() { 
    ActionBar actionBar = getSupportActionBar(); 
    if (actionBar != null) { 

     actionBar.setDisplayHomeAsUpEnabled(true); 
    } 
} 

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    int id = item.getItemId(); 
    if (id == android.R.id.home) { 
     if (!super.onMenuItemSelected(featureId, item)) { 
      NavUtils.navigateUpFromSameTask(this); 

     } 
     return true; 
    } 
    return super.onMenuItemSelected(featureId, item); 
} 


@Override 
public void onBuildHeaders(List<Header> target) { 
    loadHeadersFromResource(R.xml.pref_headers, target); 
} 


protected boolean isValidFragment(String fragmentName) { 
    return PreferenceFragment.class.getName().equals(fragmentName) 
      || NewsPreferenceFragment.class.getName().equals(fragmentName) 
      || OtherPreferenceFragment.class.getName().equals(fragmentName); 
} 


public static class NewsPreferenceFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref_news); 
     setHasOptionsMenu(true); 


    } 

    @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); 
    } 
} 


public static class OtherPreferenceFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref_other); 
     setHasOptionsMenu(true); 

    } 

    @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); 
    } 
} 


} 

這是創建新SettingsActivity時,只需用一些變化以迎合我的應用程序

回答

1

你只需要重寫onBackPressed()方法從Android Studio中生成的默認代碼:

@Override 
public void onBackPressed() { 
    NavUtils.navigateUpFromSameTask(this); 
} 
+0

你能解釋一下如何檢查一個片段是否可以刪除? – TheTechGuy96

+0

對不起,我不知道NavUtils.navigateUpFromSameTask上寫了什麼以及如何創建碎片?您能否更新問題以提供此類通知? –

+0

問題是,PreferenceActivity似乎沒有任何片段事務,我無法弄清楚當前片段究竟發生了什麼變化。 – TheTechGuy96