0

我想在现有的 TabHost/TabActivity 中使用 TabHost。所以我想摆脱 Activity 类,只实现一个从 TabHost 继承的视图组类。但是,似乎无法在没有相应 Activity 类的情况下使用 TabHost - TabHost 及其内容在显示扩展类时不会显示。

我使用了 TabHost 类并添加了包含选项卡和内容容器的线性布局,其中包含来自 xml 的适当 ID(android:id/tabs 和 android:id/tabcontent)。

public class EmitterView : TabHost, TabHost.ITabContentFactory
{
public EmitterView(Context context) :
base(context)
{
Initialize();
}

public EmitterView(Context context, IAttributeSet attrs) :
base(context, attrs)
{
Initialize();
}

private void Initialize()
{
// construct the TAB Host

LayoutInflater inflater = (LayoutInflater)    
this.Context.GetSystemService(Context.LayoutInflaterService);
View view = inflater.Inflate(AndroidFilterEditor.Resource.Layout.EmitterTabHost, null);
this.AddView(view);

this.Setup();

// Create Tabs
TabSpec emitter = this.NewTabSpec("Emitter");
emitter.SetIndicator("Emitter", Resources.GetDrawable(AndroidFilterEditor.Resource.Drawable.ic_tab_artists));
//Intent emitterIntent = new Intent(this.Context, typeof(EmitterActivity));
emitter.SetContent(this);
this.AddTab(emitter);
this.Invalidate();
}

public View CreateTabContent(string tag)
{
EmitterContentView view = new EmitterContentView(this.Context);
return view;
}
}

布局定义:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp">
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp"/>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>

知道这是否可能吗?顺便说一句,这是 Android 的 Mono,所以代码显然是 C# 中的。

4

1 回答 1

0

您可以使用 ActivityGroup 在其中托管多个活动,并将 tabhost 分配给每个活动。尽管它变得复杂并且不被鼓励。我会建议你在另一个 tabhost 中使用 Fragments 而不是 tabhost。

于 2012-07-25T13:22:08.367 回答