簡體   English   中英

在視圖之間切換,但在Xamarin中維護單擊事件

[英]Switch between views but maintain click events in Xamarin

我正在將LinearLayout與其他各種布局一起用作Xamarin(Android開發atm)中兩個AXML文件底部的菜單欄。

在我的主要活動中,我設置了單擊事件以在兩個AXML視圖之間切換,這兩個視圖都包含LinearLayout菜單欄。

第一次單擊按鈕會起作用,並且會切換布局,但是在此之后,我的所有單擊事件都不再起作用。 我嘗試在點擊事件內部重新初始化點擊事件,但無濟於事。

請考慮以下代碼:

Main.AXML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button
        android:id="@+id/MyButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    android:text="Main Page" />

<include
    layout="@layout/menu_bar" />

</LinearLayout>

Other.AXML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button
        android:id="@+id/MyButton2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Other Page" />

    <include
        layout="@layout/menu_bar" />

</LinearLayout>

MainActivity.cs

using Android.App;
using Android.Widget;
using Android.OS;

namespace Tracker
{
    [Activity(Label = "Tracker", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        SetContentView(Resource.Layout.Main);

        LinearLayout newsMenuItemLayout = FindViewById<LinearLayout>(Resource.Id.newsMenuItem);
        LinearLayout friendsMenuItemLayout = FindViewById<LinearLayout>(Resource.Id.friendsMenuItem);

        newsMenuItemLayout.Click += (sender, args) =>
        {
            SetContentView(Resource.Layout.Other);
        };


        friendsMenuItemLayout.Click += (sender, args) =>
        {
            SetContentView(Resource.Layout.Main);
        };
    }
}

menu_bar.AXML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout03"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="75dp"
      android:weightSum="100"
      android:layout_alignParentBottom="true">
    <LinearLayout
        android:orientation="vertical"
        android:layout_weight="20"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:id="@+id/newsMenuItem"
        android:background="@drawable/selector"
        android:paddingTop="6dp"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true">
      <ImageView
          android:src="@drawable/news_icon"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:id="@+id/imageView1"
          android:scaleType="fitCenter"
          android:adjustViewBounds="false" />
      <TextView
          android:text="News"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:id="@+id/textView1"
          android:gravity="center_horizontal" />
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_weight="20"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:id="@+id/eventsMenuItem"
        android:background="@drawable/selector"
        android:paddingTop="6dp"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true">
      <ImageView
          android:src="@drawable/events_icon"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:id="@+id/imageView2"
          android:scaleType="fitCenter"
          android:adjustViewBounds="false" />
      <TextView
          android:text="Events"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:id="@+id/textView2"
          android:gravity="center_horizontal" />
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_weight="20"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:id="@+id/resultsMenuItem"
        android:background="@drawable/selector"
        android:paddingTop="6dp"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true">
      <ImageView
          android:src="@drawable/results_icon"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:id="@+id/imageView3"
          android:scaleType="fitCenter"
          android:adjustViewBounds="false" />
      <TextView
          android:text="Results"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:id="@+id/textView3"
          android:gravity="center_horizontal" />
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_weight="20"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:id="@+id/friendsMenuItem"
        android:background="@drawable/selector"
        android:paddingTop="6dp"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true">
      <ImageView
          android:src="@drawable/friends_icon"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:id="@+id/imageView4"
          android:scaleType="fitCenter"
          android:adjustViewBounds="false" />
      <TextView
          android:text="Friends"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:id="@+id/textView4"
          android:gravity="center_horizontal" />
</LinearLayout>
<LinearLayout
    android:orientation="vertical"
    android:layout_weight="20"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:id="@+id/moreMenuItem"
    android:background="@drawable/selector"
    android:paddingTop="6dp"
    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="true">
  <ImageView
      android:src="@drawable/more_icon"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:id="@+id/imageView5"
      android:scaleType="fitCenter"
      android:adjustViewBounds="false" />
  <TextView
      android:text="More"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:id="@+id/textView5"
      android:gravity="center_horizontal" />
</LinearLayout>

我認為在重新加載menu_bar時,我需要重新初始化點擊事件,但是最好的方法是什么呢?

我之前曾將菜單欄作為ActionBar加載,我認為它是內容視圖的單獨實體,但是由於不可能從頂部移開,因此我不得不重新考慮這種方法。

非常感謝任何關於我如何做到這一點的想法/解釋。

我不完全確定為什么會發生這種現象,但是一種解決方案是將兩個布局都包含在主布局中,並隱藏一個。 在使用SetContentView的位置切換可見性。

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
 <include
   android:id="@+id/FirstLayout"
   layout="@layout/first" />

 <include
   android:id="@+id/SecondLayout"
   android:visibility="gone"
   layout="@layout/second" />

 <include
   layout="@layout/menu_bar" />

</LinearLayout>

first.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
  <Button
    android:id="@+id/MyButton"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Main Page" />
</LinearLayout>

second.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
  <Button
    android:id="@+id/MyButton2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Main Page" />
</LinearLayout>

活動

using Android.App;
using Android.Widget;
using Android.OS;

namespace Tracker
{
    [Activity(Label = "Tracker", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            SetContentView(Resource.Layout.Main);

            LinearLayout newsMenuItemLayout = FindViewById<LinearLayout>(Resource.Id.newsMenuItem);
            LinearLayout friendsMenuItemLayout = FindViewById<LinearLayout>(Resource.Id.friendsMenuItem);
            LinearLayout firstlayout = FindViewById<LinearLayout>(Resource.Id.FirstLayout);
            LinearLayout secondlayout = FindViewById<LinearLayout>(Resource.Id.SecondLayout);
            newsMenuItemLayout.Click += (sender, args) =>
            {
                firstlayout.Visibility = ViewStates.Visible;
                secondlayout.Visibility = ViewStates.Gone;
            };


            friendsMenuItemLayout.Click += (sender, args) =>
            {
                firstlayout.Visibility = ViewStates.Gone;
                secondlayout.Visibility = ViewStates.Visible;
            };
        }
    }
}

暫無
暫無

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

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