C# Android:错误类不能有多个基类:“Android.Support.V7.App.ActionBarActivity”和“TabHostAct”

Posted

技术标签:

【中文标题】C# Android:错误类不能有多个基类:“Android.Support.V7.App.ActionBarActivity”和“TabHostAct”【英文标题】:C# Android: Error Class cannot have multiple base classes: 'Android.Support.V7.App.ActionBarActivity' and 'TabHostAct' 【发布时间】:2016-07-26 05:13:50 【问题描述】:

我正在尝试在一个类中扩展两个活动。我知道这是不可能的,我尝试过像这样制作两个不同的类:

[Activity(Label = "DLS", Theme = "@style/MyTheme", ScreenOrientation = android.Content.PM.ScreenOrientation.Portrait)]
public class ActProduct : ActionBarActivity, TabHostAct

        base.OnCreate(savedInstanceState);

        // Create your application here
        SetContentView(Resource.Layout.layProduct);

        mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
        mDrawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
        mLeftDrawer = FindViewById<ListView>(Resource.Id.left_drawer);

        mLeftDrawer.Tag = 0;

        SetSupportActionBar(mToolbar);

        mLeftDataSet = new List<string>();
        mLeftDataSet.Add("Login");
        mLeftDataSet.Add("Camera");
        mLeftDataSet.Add("Maps");
        mLeftDataSet.Add("Product");
        mLeftAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, mLeftDataSet);
        mLeftDrawer.Adapter = mLeftAdapter;
        mLeftDrawer.ItemClick += MenuListView_ItemClick;

        mDrawerToggle = new MyActionBarDrawerToggle(
            this,                           //Host Activity
            mDrawerLayout,                  //DrawerLayout
            Resource.String.openDrawer,     //Opened Message
            Resource.String.closeDrawer     //Closed Message
        );

        mDrawerLayout.SetDrawerListener(mDrawerToggle);
        SupportActionBar.SetHomeButtonEnabled(true);
        SupportActionBar.SetDisplayShowTitleEnabled(true);
        mDrawerToggle.SyncState();


public class TabHostAct : TabActivity

    protected override void OnCreate(Bundle savedInstanceState)
    
        base.OnCreate(savedInstanceState);
        CreateTab(typeof(ActProProduk), "Prod", "Product", Resource.Drawable.ic_tab_product);
        CreateTab(typeof(ActProCustomer), "Cust", "Customer", Resource.Drawable.ic_tab_customer);
        CreateTab(typeof(ActProPromo), "Promo", "Promotion", Resource.Drawable.ic_tab_promo);
    

    private void CreateTab(Type activityType, string tag, string label, int drawableId)
    
        var intent = new Intent(this, activityType);
        intent.AddFlags(ActivityFlags.NewTask);

        var spec = TabHost.NewTabSpec(tag);
        var drawableIcon = Resources.GetDrawable(drawableId);
        spec.SetIndicator(label, drawableIcon);
        spec.SetContent(intent);

        TabHost.AddTab(spec);
    

这是我的 .axml 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_
    android:layout_>
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_
        android:layout_
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" />
    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_
        android:layout_>
    <!-- The Main Content View -->
        <FrameLayout
            android:id="@+id/main"
            android:layout_
            android:layout_ />
        <LinearLayout
            android:orientation="vertical"
            android:layout_
            android:layout_>
            <LinearLayout
                android:orientation="horizontal"
                android:layout_
                android:layout_
                android:layout_marginRight="25dp"
                android:layout_marginLeft="25dp">
                <TabHost
                    android:id="@android:id/tabhost"
                    android:layout_
                    android:layout_>
                    <LinearLayout
                        android:orientation="vertical"
                        android:layout_
                        android:layout_
                        android:padding="5dp">
                        <TabWidget
                            android:id="@android:id/tabs"
                            android:layout_
                            android:layout_ />
                        <FrameLayout
                            android:id="@android:id/tabcontent"
                            android:layout_
                            android:layout_
                            android:padding="5dp" />
                    </LinearLayout>
                </TabHost>
            </LinearLayout>
        </LinearLayout>
    <!-- The Left Navigation Drawer -->
        <ListView
            android:id="@+id/left_drawer"
            android:layout_
            android:layout_
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:divider="#818181"
            android:dividerHeight="1dp"
            android:background="#E3F2FD" />
    </android.support.v4.widget.DrawerLayout>
</LinearLayout>

我的问题有什么解决办法吗?提前谢谢你。

【问题讨论】:

i know it is not possible 既然知道没有解决方案,为什么还要寻求解决方案? 我从来没有说过我已经知道我的问题是否没有解决方案。我只是想说用我的方法不可能做到这一点。我正在努力寻找可以为我解决问题的人。 【参考方案1】:

不要使用TabActivity。相反,请在您的布局中包含 TabHost

【讨论】:

很抱歉,我不太明白你的意思。我已经在我的布局中使用 TabHost。 TabActivity 是为了让在类内运行的 TabHost 可运行。或许你可以给我代码示例? ***.com/questions/20469877/… 请注意,AppCompatActivity 还提供了 Fragmentmanager。 我创建的每个抽屉都有不同的活动。因此,为我的抽屉创建片段是不可能的,但是我目前正在尝试将选项卡布局功能变成片段,因为我认为它使用相同的活动,即“ActionBarActivity”,但是有一个错误说:'ActionBar'是 'Android.App.ActionBar' 和 'Android.Support.V7.App.ActionBar' 之间的模棱两可的引用,所以现在,我又回到了死胡同

以上是关于C# Android:错误类不能有多个基类:“Android.Support.V7.App.ActionBarActivity”和“TabHostAct”的主要内容,如果未能解决你的问题,请参考以下文章

C# 抽象类abstract

C#编程,关于基类和派生类

C# 静态类 考考你

C#抽象类及其方法的学习

C#抽象类及其方法的学习

C#基础系列 - 抽象类及其方法的学习