从MenuItem启动ListPreference(片段)

时间:2014-03-16 17:15:19

标签: android android-intent android-fragments menuitem

我试图从MenuItem启动一个偏好片段,但我遇到了一些麻烦。我按照了如何制作listPreference的教程,然后将其改编为我的项目,但它崩溃了应用程序。

这是项目,其中是prefFrag的intenet的启动点:

<item
                android:id="@+id/action_settings"
                android:orderInCategory="100"
                android:showAsAction="never"
                android:title="@string/settings"
                android:onClick="prefStartup"/>

以下是在主要活动中启动意图的代码:

public void prefStartup(MenuItem item){
    Intent intentSetPref = new Intent(getApplicationContext(), PrefActivity.class);
    startActivityForResult(intentSetPref, 0);
}

以下是帮助显示片段的两个类(直接来自教程):

public class PrefActivity extends Activity {

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

  PrefFragment prefFragment = new PrefFragment();
  FragmentManager fragmentManager = getFragmentManager();
  FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
  fragmentTransaction.replace(android.R.id.content, prefFragment);
  fragmentTransaction.commit();
 } 

}
public class PrefFragment extends PreferenceFragment {

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  addPreferencesFromResource(R.xml.preference);
 } 
}

如果这些内容直接来自教程,我不确定为什么会破坏它。在教程中,他们只是从常规按钮而不是MenuItem启动它。

1 个答案:

答案 0 :(得分:0)

我跟你不久前的教程一样,并设法绊倒了同样的问题。

不要使用prefStartup(),而是在主要活动中尝试以下操作。

   //Method for creating options menu
   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }

   //Method for handling options menu selection
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
   switch (item.getItemId()) {
    // action with ID action_settings was selected
    case R.id.action_settings:
   Intent intentSetPref = new Intent(getApplicationContext(), PrefActivity.class);
    startActivityForResult(intentSetPref, 0);
      break;
    default:
      break;
    }

    return true;
  } 

你可以删除android:onClick =&#34; prefStartup&#34;从菜单xml开始。