2016-03-04 50 views
1

我在其他各種佈局中使用LinearLayout作爲Xamarin(Android開發人員atm)中兩個AXML文件底部的菜單欄。在Xamarin中切換視圖,但保持點擊事件

在我的主要活動中,我設置了點擊事件以在兩個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,我認爲這是一個與內容視圖分開的實體,但由於無法從頂部移動,我不得不重新考慮這種方法。

任何想法/解釋如何我可以去這個非常感謝。

+0

你重置你的整個內容來看,你可以去他們切換的知名度的路線,或者你只需​​更換菜單欄本身,而不是調用'SetContentView'多次。基本上你會得到你的menuBar的引用,得到它的父視圖,並膨脹你的新佈局,並刪除舊的menuBar並添加新的。 – Jack

回答

2

我不完全確定爲什麼會出現這種情況。解決方案可能是將兩個佈局都隱藏在主佈局中。在使用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; 
      }; 
     } 
    } 
} 
+0

這是一個很好的解決方法,非常感謝,現在我將使用它。如果有人在週末沒有提出更「正確」的解決方案,我會接受答案。不要說你的不工作:)但你知道我的意思。 – Aphire

+1

是的,這是一種解決方法。您可以考慮使用片段而不是佈局,並且在片段中使用正確佈局的點擊事件。這會讓你的主要活動不那麼混亂。但這取決於你:) –

+0

@DanikRaikhlin +1只是使用片段。如果你要去切換/關閉2個佈局,那麼你已經建立了一個基本的片段系統。最好只是用碎片來實現它。 – matthewrdev