2015-06-30 169 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個月後看看你的代碼。