簡體   English   中英

在活動中創建選項卡並顯示和隱藏布局

[英]Creating Tabs and showing and hiding Layout inside an Activity

我正在 Android 中構建一個應用程序,您可以看到它的示例圖片。 在紅色矩形中,我輸入了一些 Imagebuttons。 當用戶單擊其中一個圖像按鈕時,其下方的控件應該會發生變化。 這就像我們在普通桌面應用程序中的選項卡一樣。
但我不知道如何在 Android 中實現它以及我應該使用什么樣的技術。 我應該使用布局並隱藏一個並顯示另一個嗎? 或者是否有類似於我應該使用的布局的選項卡技術?
我已經看到 Salesforce 在它的平板電腦應用程序中實現了這一點。 所以一定是可以的。 但是我幾乎到處找遍了,四處打聽,但還是找不到答案。
我將不勝感激任何類型的提示、代碼示例或其他可以顯示在 Xamarin.Android 中解決該問題的方法。在此處輸入圖片說明

根據您在此處顯示的布局,我假設這是使用FrameLayout然后使用Fragments來控制內容。

當用戶按下按鈕時,框架布局將使用事務重新填充。 它看起來像這樣:

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/buttonOne"
            android:text="One"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/buttonTwo"
            android:text="Two"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
    </LinearLayout>
    <FrameLayout
        android:id="@+id/frameContent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</LinearLayout>

活動:

public class MainActivity : Activity
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        SetContentView (Resource.Layout.Main);

        var btnOne = this.FindViewById<Button> (Resource.Id.buttonOne);
        btnOne.Click += (object sender, EventArgs e) => {
            var fragment = new MyFragment(Resource.Layout.FrameLayoutOne);
            FragmentManager
                .BeginTransaction()
                .Replace(Resource.Id.frameContent, fragment)
                .Commit();
        };

        var btnTwo = this.FindViewById<Button> (Resource.Id.buttonTwo);
        btnTwo.Click += (object sender, EventArgs e) => {
            var fragment = new MyFragment(Resource.Layout.FrameLayoutTwo);
            FragmentManager
                .BeginTransaction()
                .Replace(Resource.Id.frameContent, fragment)
                .Commit();
        };
    }
}

分段:

public class MyFragment : Fragment
{
    int layoutId;
    public MyFragment(int layoutId)
    {
        this.layoutId = layoutId;
    }

    public override void OnCreate (Bundle savedInstanceState)
    {
        base.OnCreate (savedInstanceState);
    }

    public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var view = inflater.Inflate (layoutId, container, false);
        return view;
    }
}

有關完整示例,請參閱我在 github 上托管的此示例:

片段交易示例

第一:您獨立於 Xamarin,因為 Xamarin 支持幾乎所有 native-android-API-classes。 因此,如果您找到本機 Android 代碼,您應該能夠輕松地將其轉換為 Xamarin/C#。

所以你要找的是一個 TabHost:例如,請參閱本教程:

http://androidituts.com/android-tab-layout-example/

對於 Xamarin 文檔中的 TabHost,請參閱:

http://docs.xamarin.com/guides/android/user_interface/tab_layout/

我不建議創建您的自定義 tabview,而是使用現有的解決方案。

編輯:

如果您想在活動中嵌入一個類似選項卡的控件,那么您可以創建一個 Master-Detail-View,如下所示:

  • 在左側創建一個 ListView,在右側創建一個空的 Fragment
  • 在 ListView Item 單擊上,您必須將正確的 Fragment 加載到正確的 Fragment 中
  • 將所有內容包裝在一個布局或另一個 Fragment 中以方便移植

這個問題已經在: Android Master Detail Flow Example中討論過

您還可以在 ADT-Eclipse 中創建一個新的 Master-Detail-Flow-Project。 嘗試了解生成的代碼的作用。 您可以簡單地將其轉換為 Xamarin C#。

我不知道詳細信息的另一種可能性是將 MVVM 模式與 mvvmcross 一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM