如何在主布局中使项目可见/不可见 关闭对话框片段事件



我在我的Xamrin Android应用程序中创建了对话框片段。从主布局单击按钮时,我正在打开拨号片段。在创建 dialouge 片段活动时,我隐藏了主页上的所有按钮(不可见((在我的应用程序中完美运行(。在片段关闭事件中,我需要使主布局上的所有项目可见。我在使用 OnDismiss(( 事件时遇到错误。

马辛活动.cs

using Android.App;
using Android.Widget;
using Android.OS;
using System;
using Android.Content;
using Android.Media;
using Android.Views;
namespace MyHome
{
    [Activity(Label = "MyHome", MainLauncher = true,Icon ="@drawable/Icon")]
    public class MainActivity : Activity
    {
        private Button mbtnGoToRoom;
        private Button mbtnGoToSettings;
        private Button mBtnOverview;
        private ToggleButton mBtnStatus;
        private ProgressBar mprogressBar;
        protected override void OnRestart()
        {
            base.OnRestart();
            mbtnGoToRoom.Visibility = ViewStates.Visible;
            mBtnOverview.Visibility = ViewStates.Visible;
            mbtnGoToSettings.Visibility = ViewStates.Visible;
            mBtnStatus.Visibility = ViewStates.Visible;
            mprogressBar.Visibility = ViewStates.Visible;
            var mClock = FindViewById<DigitalClock>(Resource.Id.digitalClock1);
            mClock.Visibility = ViewStates.Visible;
        }
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
           mbtnGoToRoom = FindViewById<Button>(Resource.Id.BtnGoToRoom);
           mBtnOverview = FindViewById<Button>(Resource.Id.BtnOverview);
           mbtnGoToSettings = FindViewById<Button>(Resource.Id.BtnSetting);
           mBtnStatus = FindViewById<ToggleButton>(Resource.Id.BtnStatus);
           mprogressBar = FindViewById<ProgressBar>(Resource.Id.progressBar1);
            var mClock = FindViewById<DigitalClock>(Resource.Id.digitalClock1);
            mbtnGoToRoom.Click += (object sender, EventArgs args) =>
            {
                mbtnGoToRoom.Visibility = ViewStates.Invisible;
                mBtnOverview.Visibility = ViewStates.Invisible;
                mbtnGoToSettings.Visibility = ViewStates.Invisible;
                mBtnStatus.Visibility = ViewStates.Invisible;
                mprogressBar.Visibility = ViewStates.Invisible;
                mClock.Visibility = ViewStates.Invisible;

                //Pull up Room menu
                FragmentTransaction transaction = FragmentManager.BeginTransaction();
                Rooms room = new Rooms();
                room.Show(transaction, "dialog fragment");
            };
            mbtnGoToSettings = FindViewById<Button>(Resource.Id.BtnSetting);
            mbtnGoToSettings.Click += (object sender, EventArgs args) =>
            {
                //Pull up Room menu
                FragmentTransaction transaction = FragmentManager.BeginTransaction();
                Settings settings = new Settings();
                settings.Show(transaction, "dialog fragment");
            };
        }    
    }
}

聊天室.cs(对话片段活动(

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.Graphics;
using Android.Graphics.Drawables;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using static Android.Provider.CalendarContract;
namespace MyHome
{
    class Rooms : DialogFragment

    {
        Android.Media.MediaPlayer player;
        private Button mBtnGoToHall;
        private Button mBtnGoToBroom1;
        private Button mBtnGoToBroom2;
        private Button mBtnGoToKitchen;
        private Button mBtnGoToBalcony;
        private Button mBtnGoToGarden;

        private Button mbtnGoToRoom;
        private Button mbtnGoToSettings;
        private Button mBtnOverview;
        private ToggleButton mBtnStatus;
        private ProgressBar mprogressBar;

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            base.OnCreateView(inflater, container, savedInstanceState);
            var view = inflater.Inflate(Resource.Layout.Room_Menu, container, false);

            mBtnGoToHall = view.FindViewById<Button>(Resource.Id.btnHall);
            mBtnGoToHall.Click += mBtnGoToHall_Click;
            mBtnGoToBroom1 = view.FindViewById<Button>(Resource.Id.btnBedroom1);
            mBtnGoToBroom1.Click += mBtnGoToBroom1_Click;
            mBtnGoToBroom2 = view.FindViewById<Button>(Resource.Id.btnBedroom2);
            mBtnGoToBroom2.Click += mBtnGoToBroom2_Click;
            mBtnGoToKitchen = view.FindViewById<Button>(Resource.Id.btnKitchen);
            mBtnGoToKitchen.Click += mBtnGoToKitchen_Click;
            mBtnGoToBalcony = view.FindViewById<Button>(Resource.Id.btnBalcony);
            mBtnGoToBalcony.Click += mBtnGoToBalcony_Click;
            mBtnGoToGarden = view.FindViewById<Button>(Resource.Id.btnGarden);
            mBtnGoToGarden.Click += mBtnGoToGarden_Click;


            return view;
        }
        private void mBtnGoToHall_Click(object sender, EventArgs e)
        {
            player.Start();
            var intent = new Intent(Activity, typeof(ActvtHall));
            StartActivity(intent);
            this.Dismiss();
        }
        private void mBtnGoToBroom1_Click(object sender, EventArgs e)
        {
            player.Start();
            var intent = new Intent(Activity, typeof(ActvtBedroom1));
            StartActivity(intent);
            this.Dismiss();
        }
        private void mBtnGoToBroom2_Click(object sender, EventArgs e)
        {
            player.Start();
            var intent = new Intent(Activity, typeof(ActvtBedroom2));
            StartActivity(intent);
            this.Dismiss();
        }
        private void mBtnGoToKitchen_Click(object sender, EventArgs e)
        {
            player.Start();
            var intent = new Intent(Activity, typeof(ActvtKitchen));
            StartActivity(intent);
            this.Dismiss();
        }
        private void mBtnGoToBalcony_Click(object sender, EventArgs e)
        {
            player.Start();
            var intent = new Intent(Activity, typeof(ActvtBalcony));
            StartActivity(intent);
            this.Dismiss();
        }
        private void mBtnGoToGarden_Click(object sender, EventArgs e)
        {
            player.Start();
            var intent = new Intent(Activity, typeof(ActvtGarden));
            StartActivity(intent);
            this.Dismiss();
        }

        public override void OnActivityCreated(Bundle savedInstanceState)
        {

            player = Android.Media.MediaPlayer.Create(Context, Resource.Raw.Door);
            Dialog.Window.RequestFeature(WindowFeatures.NoTitle);
            base.OnActivityCreated(savedInstanceState);

            Dialog.Window.Attributes.WindowAnimations = Resource.Style.dialog_animation; //set the animation
            Dialog.Window.SetBackgroundDrawable(new ColorDrawable(Color.Transparent));

        }
        public override void OnDismiss(IDialogInterface dialog)
        {
            base.OnDismiss(dialog);
            mbtnGoToRoom = View.FindViewById<Button>(Resource.Id.BtnGoToRoom);
            mBtnOverview = View.FindViewById<Button>(Resource.Id.BtnOverview);
            mbtnGoToSettings = View.FindViewById<Button>(Resource.Id.BtnSetting);
            mBtnStatus = View.FindViewById<ToggleButton>(Resource.Id.BtnStatus);
            mprogressBar = View.FindViewById<ProgressBar>(Resource.Id.progressBar1);
            var mClock = View.FindViewById<DigitalClock>(Resource.Id.digitalClock1);
            mbtnGoToRoom.Visibility = ViewStates.Visible;
            mBtnOverview.Visibility = ViewStates.Visible;
            mbtnGoToSettings.Visibility = ViewStates.Visible;
            mBtnStatus.Visibility = ViewStates.Visible;
            mprogressBar.Visibility = ViewStates.Visible;
            mClock.Visibility = ViewStates.Visible;
        }
    }
}

在此处输入图像描述

在此处输入图像描述

原因是您无法在OnDismiss()中获取按钮。我认为您应该在创建时将它们传递到 room 类中.
例如,在 MainActivity:

             FragmentTransaction transaction = FragmentManager.BeginTransaction();
             Rooms room = new Rooms(mbtnGoToRoom, mbtnGoToSettings, mBtnOverview, mBtnStatus, mprogressBar, mClock);                  
             room.Show(transaction, "dialog fragment");

客房内.cs:

        private Button mbtnGoToRoom;
        private Button mbtnGoToSettings;
        private Button mBtnOverview;
        private ToggleButton mBtnStatus;
        private ProgressBar mprogressBar;
        private DigitalClock mClock;
        public Rooms(Button mbtnGoToRoom, Button mbtnGoToSettings,Button mBtnOverview,ToggleButton mBtnStatus, ProgressBar mprogressBar, DigitalClock mClock)
        {
            this.mbtnGoToRoom = mbtnGoToRoom;
            this.mBtnOverview = mbtnGoToSettings;
            this.mbtnGoToSettings = mBtnOverview;
            this.mBtnStatus = mBtnStatus;
            this.mprogressBar = mprogressBar;
            this.mClock = mClock;
        }
        public override void OnDismiss(IDialogInterface dialog)
        {
            base.OnDismiss(dialog);
            mbtnGoToRoom.Visibility = ViewStates.Visible;
            mBtnOverview.Visibility = ViewStates.Visible;
            mbtnGoToSettings.Visibility = ViewStates.Visible;
            mBtnStatus.Visibility = ViewStates.Visible;
            mprogressBar.Visibility = ViewStates.Visible;
            mClock.Visibility = ViewStates.Visible;
        }

最新更新