[英]Switch between 2 views of a recyclerview on a button click in android
[英]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.