2015-06-30 115 views
2

我试图实现James Montemagno的导航抽屉(https://github.com/jamesmontemagno/Xamarin-Templates),我遇到了问题。当我创建一个新项目时,我没有遇到任何问题,但是当我尝试将支持库添加到现有项目时,出现以下错误:Xamarin.Android支持库

类型或名称空间名称“Support”不存在于命名空间'我的命名空间'中(你是否缺少程序集引用)?

这里是我的代码(该问题的代码是最后一行我还没有过去,这是因为我想知道发生了什么。):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using Android.App; 
using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 

using Android.Support.V7.App; 
using Android.Support.V4.Widget; 
using Android.Support.V4.View; 

using MyApp.Parse; 
using MyApp.Android.Core.Login; 
using MyApp.Android.Core.Utils; 

namespace MyApp.Android.Core.Main 
{ 
    [Activity(Label = "MainActivity", Icon = "@drawable/Icon")] 
    public class MainActivity : BaseActivity 
    { 
     private MyActionBarDrawerToggle mDrawerToggle; 
     private string mDrawerTitle; 
     private string mTitle; 

     private DrawerLayout mDrawerLayout; 
     private ListView mDrawerListView; 
     private DrawerMenuAdapter mAdapter; 

     protected override int LayoutResource 
     { 
      get 
      { 
       return Resource.Layout.Main; 
      } 
     } 

     protected override void OnCreate(Bundle savedInstanceState) 
     { 
      base.OnCreate(savedInstanceState); 

      // setup drawer 
      mTitle = mDrawerTitle = Title; 
      mDrawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout); 
      mDrawerListView = FindViewById<ListView>(Resource.Id.left_drawer); 

      // create adapter for drawer 
      mDrawerListView.Adapter = mAdapter = new DrawerMenuAdapter(this); 

      // set click handler 
      mDrawerListView.ItemClick += (sender, args) => ListItemClicked(args.Position); 

      // set DrawerShadow 
      mDrawerLayout.SetDrawerShadow(Resource.Drawable.drawer_shadow_dark, (int)GravityCompat.Start); 

      // set DrawerToggle - the animation that happens with the indicator next to the actionbar 
      mDrawerToggle = new MyActionBarDrawerToggle(this, mDrawerLayout, Toolbar, 
       Resource.String.drawer_open, 
       Resource.String.drawer_close); 

      // display current fragment's title and update the options menu 
      mDrawerToggle.DrawerClosed += (o, args) => 
      { 
       this.SupportActionBar.Title = mTitle; 
       this.SupportInvalidateOptionsMenu(); 
      }; 

      // display the drawer title and update the options menu 
      mDrawerToggle.DrawerOpened += (o, args) => 
      { 
       this.SupportActionBar.Title = mDrawerTitle; 
       this.SupportInvalidateOptionsMenu(); 
      }; 

      // set the drawer listener 
      mDrawerLayout.SetDrawerListener(mDrawerToggle); 

      // if first time, click first item 
      if (savedInstanceState == null) 
       ListItemClicked(0); 

      // 
      Button logout = FindViewById<Button>(Resource.Id.logoutButton); 

      logout.Click += (object sender, EventArgs e) => 
      { 
       Toast.MakeText(this, APIHandler.Logout(), ToastLength.Long).Show(); 
       StartActivity(typeof(DispatchActivity)); 
      }; 
     } 

     int oldPosition = -1; 
     private void ListItemClicked(int position) 
     { 
      // this way we don't load twice 
      if (position == oldPosition) 
       return; 

      oldPosition = position; 

      Android.Support.V4.App.Fragment fragment = null; 
     } 
    } 
} 

我使用Visual Studio和我试过在我的项目中使用参考和组件导入Xamarin.Android.Support.v4和Xamarin.Android.Support.v7.AppCompat。当我在课程开始时使用''时,我可以找到Android.Support,但是一旦我进入课程声明后,我无法找到Android.Support。

有谁知道如何解决这个问题?我是C#,Xamarin和Visual Studio的新手,所以我有点不知所措。

我知道我可以通过刚开始一个新项目并复制大部分旧代码来解决此问题,但我想知道为什么我会收到此错误。

+0

你想从支持库中使用什么特定的控件?对于导航抽屉,您应该使用Android.Support.V4.Widget.DrawerLayout以及可选的新支持设计库和Android.Support.Design.Widget.NavigationView(用于抽屉内部的内容) – codechinchilla

+0

这正是我所知道的试图去做。但这意味着我需要使用Android.Support.V4.App.Fragment,这是我遇到的问题。这几乎就像我的'使用Android.Suport.V4.Widget'和Android.Support.V4.App.Fragment(在类中)正在碰到不同的Android实例。我的项目名为ProjectName.Android是否重要? – Matt

+0

嗯,你的项目命名为ProjectName.Android应该没关系 - 如果你在你的代码中使用完全限定名称(即Android.Support.V4.Widget.DrawerLayout)会发生什么?你也可以在问题类中粘贴吗? – codechinchilla

回答

1

它看起来像有实际上是MyApp.Android和Android.Support.etc一个命名空间冲突 - 解决这个问题的片段,把这个了与usings:

using Fragment = Android.Support.V4.App.Fragment; 

这应该正确解析命名空间(或者如果它变得太麻烦,你可以从Myapp.Android改变你的名字空间)。

+0

将命名空间更改为MyApp.Droid不会执行任何操作。也许这是因为我错过了更改某处代码行,或者这是我的Package设置,我不太确定。该代码snippit虽然工作奇迹。 – Matt

0

我会建议使用using语句有点不太具体进口:

using SupportV7 = Android.Support.V7.App; 
using SupportV4 = Android.Support.V4.App; 

或者你喜欢的任何名称,以便您可以说:

SupportV7.Fragment 
    SupportV4.Fragment 

只是一个偏好,所以你知道什么时候你在3个月后看看你的代码。