Xamarin.Android支持库

时间:2015-06-30 01:00:38

标签: android xamarin

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

类型或命名空间名称'支持'命名空间中不存在我的命名空间' (你错过了一个程序集参考)吗?

这是我的代码(问题代码是最后一行。我还没有通过这个,因为我想了解发生了什么):

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,并且我尝试使用项目中的Reference和Components导入Xamarin.Android.Support.v4和Xamarin.Android.Support.v7.AppCompat。当我使用&#39;时,我可以找到Android.Support。在课程的开头,但是我在课堂宣言中找不到Android.Support。

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

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

3 个答案:

答案 0 :(得分:5)

看起来实际上存在与MyApp.Android和Android.Support.etc的命名空间冲突 - 要解决片段问题,请使用以下内容:

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

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

答案 1 :(得分:1)

我建议使用一个不太具体的using语句导入:

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

或者你想要的任何名字,你可以说:

  SupportV7.Fragment
  SupportV4.Fragment

只是一个偏好,所以当你3个月后查看代码时就知道了。

答案 2 :(得分:0)

我发现调用项目.Android是一个非常糟糕的主意,因为“ MyApp.AndroidApp”部分会引起各种冲突问题!

调用{{1}}之类的东西可以解决各种错误...