我知道這個問題經常被問到,但沒有一個可接受的解決方案適用於我。 (reference solution)錯誤的第二個參數類型:從片段內調用.replace()
當我嘗試從其中一個其他片段中啓動偏好菜單片段時,出現了經典的「錯誤的第二個參數類型」錯誤。
Unforunately,甚至做什麼這個問題的答案接受建議(調用FragmentManager fragmentManager = getSupportFragmentManager()
和進口android.support.v4.app.FragmentManager;
我仍然看到了「錯誤的第二個參數類型」的錯誤,當我打電話.replace()後
快速概述:我MainActivity.java打開一個片段viewpager(MenuPager.java),從中我嘗試推出另一個片段(FragmentSettingsMenu.java)當按鈕被點擊內FragmentTrackRecordMenu.java(MenuPager.java的子片段)。
我的代碼如下:當點擊菜單按鈕(在FragmentTrackRecord中)時,我嘗試啓動設置菜單片段,但我無法獲取aro和前面提到的編譯器錯誤。如何從這個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);
}
}
您的FragmentManager是v4類型,而FragmentSettingsMenu不是v4類型。因此它不允許。 –
@RushiAyyappa有沒有辦法讓FragmentSettingsMenu使用v4庫?我從谷歌教程中獲取了該代碼,因此我不熟悉如何進行更改。 – Cody