我知道这个问题经常被问到,但是没有一个被接受的解决方案对我有用。
尝试从其他片段之一启动“首选项菜单”片段时,出现经典的“错误的第二个参数类型”错误。
不幸的是,即使执行了该问题中可接受的答案所建议的操作(调用FragmentManager fragmentManager = getSupportFragmentManager()并导入android.support.v4.app.FragmentManager;当我调用.replace(时android.support.v4.app.FragmentManager;我仍然看到“第二个参数类型错误”的错误) )。
快速概览:我的MainActivity.java打开一个片段查看器(MenuPager.java),当在FragmentTrackRecordMenu.java(MenuPager.java的子片段)中单击按钮时,我尝试从中启动另一个片段(FragmentSettingsMenu.java)。
我的代码如下。 单击菜单按钮(位于FragmentTrackRecord内)时,我尝试启动设置菜单片段,但无法解决上述编译器错误。 如何通过此onClick成功显示我的PreferencesFragment?
MainActivity.java
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
public class MainActivity extends FragmentActivity {
public static ViewPager menuPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
menuPager = (ViewPager) findViewById(R.id.pager);
PagerAdapter pageAdapter = new MenuPagerAdapter(getSupportFragmentManager());
menuPager.setAdapter(pageAdapter);
...
}
}
MenuPagerAdapter.java
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class MenuPagerAdapter extends FragmentPagerAdapter {
public MenuPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
switch (arg0) {
case 0:
return new FragmentNeckDisplayMenu();
case 1:
return new FragmentCapoMenu();
case 2:
return new FragmentTrackRecordMenu();
default:
break;
}
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 3;
}
}
FragmentTrackRecordMenu.java
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
public class FragmentTrackRecordMenu extends Fragment {
private Button menuIcon;
public FragmentTrackRecordMenu(){ } //default constructor
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.menu_fragment_recorder, container, false);
menuIcon = (Button) v.findViewById(R.id.menuIcon);
menuIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //open popup window
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(android.R.id.content, new FragmentSettingsMenu()) //COMPILER ERROR
.commit();
}
});
}
}
FragmentSettingsMenu.java
public class FragmentSettingsMenu extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from the XML resource
addPreferencesFromResource(R.xml.preferences);
}
}