我试图从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启动它。
答案 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开始。