2017-04-04 79 views
-4

使用visual studio创建一个包含选项卡式视图的骨架应用程序。一个选项卡用于设置,但无法使用首选项api。 我得到这个错误:VS 2017 - xamarin - TabHost首选项的麻烦TAB

android.view.View不能转换到android.view.ViewGroup

下面的代码:

//*********************** 
//class for settings tab 
//*********************** 
    [Activity(Label = "Settings")] 
    [MetaData(PreferenceManager.MetadataKeyPreferences, Resource = "@drawable/preferences")] 
    public class Settings : Activity 
    { 
     protected override void OnCreate(Bundle savedInstanceState) 
     { 

      base.OnCreate(savedInstanceState); 
      View vg = new View(this); 
      TextView textview = new TextView(vg.Context); 
      textview.Text = "This is the Settings Tab"; 
      SetContentView(vg); 
      textview.Id = TextView.GenerateViewId(); 
      vg.Id = View.GenerateViewId(); 
      FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction(); 
      SettingsFragment cfg = new SettingsFragment(); 

      fragmentTx.Add(vg.Id, cfg); 

      // Commit the transaction. 
      fragmentTx.Commit(); 
     } 
    } 

    public class SettingsFragment : PreferenceFragment 
    { 

     public override void OnCreate(Bundle savedInstanceState) 
     { 
      base.OnCreate(savedInstanceState); 
      AddPreferencesFromResource(Resource.Xml.preferences); 
      /*var intent = new Intent(this.Activity, typeof(Settings)); 
      AddPreferencesFromIntent(intent);*/ 
     } 



    } 
+0

刚才问是否有类似的东西somewere贴!阅读指南似乎对我来说都很清楚,但在实践中我受到了打击!会发布更具体的问题来达到我的目标。 :-) – user3546624

回答

0

找到!代替查看用的FrameLayout:

保护覆盖无效的onCreate(捆绑savedInstanceState) {

base.OnCreate(savedInstanceState); 
    FrameLayout frame = new FrameLayout(this); 
    SetContentView(frame); 
    frame.Id = FrameLayout.GenerateViewId(); 
    FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction(); 
    SettingsFragment cfg = new SettingsFragment(); 
    fragmentTx.Add(frame.Id, cfg); 
    // Commit the transaction. 
    fragmentTx.Commit(); 
}