Android 在视图之间切换,但在Xamarin中维护单击事件
我将Android 在视图之间切换,但在Xamarin中维护单击事件,android,android-layout,xamarin,Android,Android Layout,Xamarin,我将线性布局与其他各种布局一起使用,作为Xamarin(Android开发atm)中两个AXML文件底部的菜单栏 在我的主要活动中,我设置了单击事件以在两个AXML视图之间切换,这两个视图都包括LinearLayout菜单栏 第一次单击按钮会起作用,并切换布局,但此后,我的单击事件似乎不再起作用。我已尝试在单击事件中重新初始化单击事件,但无效 请考虑以下代码: Main.AXML <?xml version="1.0" encoding="utf-8"?> <LinearLay
线性布局
与其他各种布局一起使用,作为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>
<?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>
<?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>
其他.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>
<?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>
<?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>
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);
};
}
}
使用Android.App;
使用Android.Widget;
使用Android.OS;
名称空间跟踪器
{
[活动(Label=“Tracker”,MainLauncher=true,Icon=“@drawable/Icon”)]
公共课活动:活动
{
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
LinearLayout newsMenuItemLayout=FindViewById(Resource.Id.newsMenuItem);
LinearLayout friendsMenuItemLayout=FindViewById(Resource.Id.friendsMenuItem);
newsMenuItemLayout。单击+=(发件人,参数)=>
{
SetContentView(Resource.Layout.Other);
};
friendsMenuItemLayout。单击+=(发件人,参数)=>
{
SetContentView(Resource.Layout.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>
<?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>
<?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>
我假设当我重新加载菜单栏时,我需要重新初始化我的点击事件,但是如何才能最好地实现这一点呢
我以前确实将菜单栏作为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>
<?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>
<?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>
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">
<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>
<?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>
<?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>
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">
<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>
<?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>
<?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;
};
}
}
}
使用Android.App;
使用Android.Widget;
使用Android.OS;
名称空间跟踪器
{
[活动(Label=“Tracker”,MainLauncher=true,Icon=“@drawable/Icon”)]
公共课活动:活动
{
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
LinearLayout newsMenuItemLayout=FindViewById(Resource.Id.newsMenuItem);
LinearLayout friendsMenuItemLayout=FindViewById(Resource.Id.friendsMenuItem);
LinearLayout firstlayout=findviewbyd(Resource.Id.firstlayout);
LinearLayout secondlayout=findviewbyd(Resource.Id.secondlayout);
newsMenuItemLayout。单击+=(发件人,参数)=>
{
firstlayout.Visibility=ViewStates.Visible;
secondlayout.Visibility=ViewStates.Gone;
};
friendsMenuItemLayout。单击+=(发件人,参数)=>
{
firstlayout.Visibility=ViewStates.Gone;
secondlayout.Visibility=ViewStates.Visible;
};
}
}
}
这是一个很好的解决办法,非常感谢,我现在就用这个。如果有人在周末没有想出一个更正确的解决方案,我会接受这个答案。不要说你的不起作用:但是你知道我的意思。是的,你可以考虑使用片段而不是布局和句柄点击甚至。ts用于片段内的正确布局。这将使您的主要活动不那么混乱。但这取决于您:)@DanikRaikhlin+1用于仅使用片段。如果您要尝试关闭/打开2个布局,那么您已经构建了一个基本的片段系统。最好只使用片段来实现它。您可以重置整个片段在ent视图中,您可以切换菜单栏的可见性,也可以只替换菜单栏本身,而不必多次调用SetContentView
。基本上,您可以获得对菜单栏的引用,获取其父视图,展开新布局,删除旧菜单栏并添加新菜单栏。