0

我知道這個問題經常被問到,但沒有一個可接受的解決方案適用於我。 (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); 
    } 
} 
+0

您的FragmentManager是v4類型,而FragmentSettingsMenu不是v4類型。因此它不允許。 –

+0

@RushiAyyappa有沒有辦法讓FragmentSettingsMenu使用v4庫?我從谷歌教程中獲取了該代碼,因此我不熟悉如何進行更改。 – Cody

回答

0

getSupportFragmentManager()返回android.support.v4.app.FragmentManager的片段經理和FragmentSettingMenu.java是android.app.Fragment的。這就是爲什麼「錯誤的第二個參數類型」錯誤,因爲它們不兼容。

+0

那有什麼解決辦法?以某種方式更改FragmentSettingsMenu? – Cody

+0

使用getFragmentManager()代替getSupportFragmentManager()或使用android.support.v4.app.Fragment擴展FragmentSettingsMenu – 29yash

0

您的FragmentManager是v4類型,而FragmentSettingsMenu不是v4類型。因此它不允許。請在活動中嘗試以下行。

getFragmentManager().beginTransaction().replace(android.R.id.content, 
      new PrefsFragment()).commit(); 

。嘗試這個link here

它可能給你一些幫助。

相關問題