我知道这个问题经常被问到,但是没有一个被接受的解决方案对我有用。 (reference solution)
我得到了经典"错误的第二个参数类型"当我尝试从其他一个片段中启动一个Preference Menu片段时出错。
不幸的是,即使完成了该问题中接受的答案(调用FragmentManager fragmentManager = getSupportFragmentManager()
并导入android.support.v4.app.FragmentManager;
),我仍然会看到"错误的第二个参数类型"我打电话时出错。 replace()。
快速概述:我的MainActivity.java打开一个片段viewpager(MenuPager.java),当我在FragmentTrackRecordMenu.java(MenuPager的子片段)中单击一个按钮时,我尝试从该片段启动另一个片段(FragmentSettingsMenu.java)。 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);
}
}
答案 0 :(得分:0)
getSupportFragmentManager()返回android.support.v4.app.FragmentManager的片段管理器,而FragmentSettingMenu.java是android.app.Fragment。这就是为什么“错误的第二个参数类型”错误,因为它们是不兼容的。
答案 1 :(得分:0)
你的FragmentManager是v4类型而FragmentSettingsMenu不是v4类型。它不允许。在活动中尝试以下行。
getFragmentManager().beginTransaction().replace(android.R.id.content,
new PrefsFragment()).commit();
。这个link here
它可能会给你一些帮助。