关闭首选项片段



我再次搜索了几个小时,但没有找到我理解/正在寻找的答案。

我有一个首选项屏幕,当用户单击菜单中的设置时会打开。这行得通。但是,如何最好地使用户在完成设置后关闭此屏幕。

我喜欢在Chrome中完成的方式,您可以在其中返回上一个屏幕。

其他可能性也值得赞赏。

活动,它落在首选项(它应该返回):

   public class MainActivity extends Activity
   {
      @Override
      public void onCreate(Bundle savedInstanceState)
      {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
      }
      public void startGame(View view) 
      {
          Intent intent = new Intent(this, Game.class);
          startActivity(intent);
      }
          @Override
      public boolean onCreateOptionsMenu(Menu menu) 
      {
          MenuInflater inflater = getMenuInflater();
          inflater.inflate(R.layout.game_settings, menu);
          return super.onCreateOptionsMenu(menu);
      }
      @Override
      public boolean onOptionsItemSelected(MenuItem item) 
      {
          switch (item.getItemId()) 
          {
         case R.id.action_settings:
           getFragmentManager().beginTransaction()
              .replace(android.R.id.content, new SettingsFragment())
              .commit();
           return true;
         default:
           return super.onOptionsItemSelected(item);
          }
      }
  }

偏好:

   public class SettingsFragment extends PreferenceFragment 
   {
       @Override
       public void onCreate(Bundle savedInstanceState) 
       {
           super.onCreate(savedInstanceState);
           addPreferencesFromResource(R.layout.preferences);
       }
   }

.XML:

  <?xml version="1.0" encoding="utf-8"?>
  <PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory android:title="@string/game_settings">
      <ListPreference 
        android:title="@string/circle_setting_title"
        android:key="circle_setting"
        android:summary="@string/circle_setting_summary" 
        android:entries="@array/circle_setting_amount"
        android:entryValues="@array/circle_setting_amount_value"
        android:defaultValue="3"/>
      <ListPreference 
        android:title="@string/color_setting_title"
        android:key="color_setting"
        android:summary="@string/color_setting_summary" 
        android:entries="@array/color_setting_amount"
        android:entryValues="@array/color_setting_amount_value"
        android:defaultValue="3"/>
    </PreferenceCategory>
  </PreferenceScreen>

接受的答案不正确。通过执行:startActivity(new Intent(this, PrefsActivity.class));您实际上向堆栈中添加了一个新活动。

如果你想回到屏幕,你应该使用onBackPress方法。

代码示例应如下所示:

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

上述解决方案将设置操作栏上的主页按钮,使其与返回按钮的反应相同。这两个按钮都将返回到活动的堆栈上设置活动(之前的一个活动)。

在你的代码中,你有:

  @Override
  public boolean onOptionsItemSelected(MenuItem item) 
  {
      switch (item.getItemId()) 
      {
     case R.id.action_settings:
       getFragmentManager().beginTransaction()
          .replace(android.R.id.content, new SettingsFragment())
          .commit();
       return true;
     default:
       return super.onOptionsItemSelected(item);
      }
  }

相反,您可以按如下方式扩展它:

  @Override
  public boolean onOptionsItemSelected(MenuItem item) 
  {
      switch (item.getItemId()) 
      {
     case R.id.action_settings:
       getFragmentManager().beginTransaction()
          .replace(android.R.id.content, new SettingsFragment())
          .addToBackStack("settings")
          .commit();
       return true;
     default:
       return super.onOptionsItemSelected(item);
      }
  }

现在,当有人按下后退按钮时,交易将被记住并撤消。

要使 MainActivity 成为首选项的父活动:
假设您的 res/xml 文件夹中已经有 prefs.xml(或任何您喜欢命名它)的文件:

清单中声明您的活动(在应用程序部分):

<!-- Main activity -->
<activity
    android:name="com.example.app.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<!-- Preferences -->
<activity
    android:name="com.example.app.PrefsActivity"
/>

然后,假设你有一个菜单、一个按钮或任何你想展示的东西。首选项屏幕,只需将此行添加到事件处理程序:

startActivity(new Intent(this, PrefsActivity.class));

无需创建新活动,只需覆盖首选项片段的布局并膨胀内部带有按钮的布局即可。然后侦听按钮单击事件以关闭片段。

相关内容

  • 没有找到相关文章

最新更新