2017-02-04 58 views
2

我是新来的android开发,并面临一个问题: 我有一个正常的选项卡式MainActivity,并从Android Studio的设置活动模板创建SettingsActivity。 MainActivity是SettingsActivity的层次结构父项。Android Studio - 只有一个片段/无头文件的活动

代码开始在MainActivity.java的SettingsActivity:

Intent intent = new Intent(this, SettingsActivity.class); 
     startActivity(intent); 

我只希望有一个设置页面。 由于Android指南“addPreferencesFromResource();”已被弃用并被首选标题取代。但是对于这些偏好标题,我在MainActivity和我的实际设置页面(在pref_settings.xml中定义)之间又多了一个页面。 在谷歌搜索如何摆脱这个额外的页面后,我在SettingsActivity.java中找到了这个语句onCreate方法:

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

    getFragmentManager().beginTransaction() 
      .replace(android.R.id.content, new PillPreferenceFragment()) 
      .commit(); 
} 

那么,它确实解决了我的问题。启动SettingsActivity时将显示pref_settings.xml。但后退按钮不起作用了。它总是返回到SettingsActivity而不是MainActivity。所以这是一个无止境的循环。 有谁知道什么是问题以及如何解决它?

我希望我的描述是可以理解的。如果您需要更多信息,请告诉我。

非常感谢! :)

+0

我无法理解proerply你想怎么表达,但我想你问的是要回去的主要活动,如果用户按下返回键。并且它没有去,因为你没有实施后面按下。你有吗? –

回答

2

我自己找到了解决方案。

我不得不在SettingsActivity.java添加以下代码:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     this.finish(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
0

试试下面这段代码:

Intent i = new Intent(getApplicationContext(), SettingsActivity.class); 
      startActivity(i); 
      finish(); 

在应用程序代码中加入这一行的Android清单:

android:launchMode="singleTask" 

,不要忘了覆盖后按下按钮:

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

感谢您的快速响应。不幸的是它并没有解决它。 在我的清单文件中,我注意到SettingsActivity的标记没有任何意图过滤器。这可能很重要吗? – Lados

+0

通常意图过滤器是针对默认活动的:http://stackoverflow.com/questions/3321514/what-are-intent-filters-in-android – rodoboss

相关问题