我正试图从菜单项启动一个偏好片段,我遇到了一些麻烦。我遵循了一个关于如何制作listPreference的教程,然后将其调整到我的项目中,但它会使应用程序崩溃。
这个条目是连接到prefFrag的起始点:
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/settings"
android:onClick="prefStartup"/>
下面是在主活动中启动intent的代码:
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);
}
}
我真的不知道为什么它会打破,如果这些东西是直接从教程。在本教程中,他们只是通过常规按钮而不是菜单项来启动它。
不久以前,我和你一样学习了同样的教程,也遇到了同样的问题。
在你的主活动中试试下面的方法,而不是使用你的prestartup()。
//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;
}
你可以从你的菜单xml中删除android:onClick="prefStartup"