0

我真的沒想到一個好問題的標題。對於那個很抱歉。FragmentActivity和Fragment ...我如何在這種情況下工作?

這裏是我的問題: 我有我的主要活動:

using System; 

using Android.App; 
using Android.Content; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Android.OS; 
using Android.Support.V4.App; 

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

       // Set our view from the "main" layout resource 
       SetContentView(Resource.Layout.Main);   
       //Not sure if I need the code below 
       FragmentTransaction ft = this.SupportFragmentManager.BeginTransaction(); 
       Activity2 fragment = new Activity2(); 
       ft.Add(Resource.Id.fragmentContainer, fragment); 
       ft.Commit(); 
      } 
     } 
    } 

爲主要活動的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"> 
    <fragment 
     class="AndroidApplication2.Activity2" 
     android:id="@+id/fragmentContainer" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
    <Button 
     android:id="@+id/changeFragment" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Change Fragment" /> 
</LinearLayout> 

現在,活性2看起來是這樣的:

namespace AndroidApplication2 
{ 
    [Activity(Label = "My Activity")] 
    public class Activity2 : Fragment 
    { 
     public override View OnCreateView(LayoutInflater p0, ViewGroup p1, Bundle p2) 
     { 
      return p0.Inflate(Resource.Layout.fragment_layout, p1, false); 
     } 
    } 
} 

和fragment_layout.axml看起來像這樣:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <TextView 
     android:id="@+id/myTextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="This is a TextView from the fragment" /> 
    <Button 
     android:id="@+id/myButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="This is a Button from the fragment" /> 
</LinearLayout> 

此代碼是在C#中使用Xamarin。

現在,我想要做的就是訪問fragment_layout中的按鈕並使用它來替換Activity1中的片段(我的主要活動)。我正在使用它來避免爲每個簡單的事情創建新的活動,例如顯示某些細節,但我也不能使用任何彈出窗口。

我無法訪問我在我的主FragmentActivity中加載的片段上的按鈕,我可以用它替換另一個片段。幫幫我!謝謝!任何其他改進或建議也是受歡迎的。

+0

好的,我的一個問題就解決了。如果靜態添加,我無法替換片段。但我仍然不知道如何訪問我添加的新片段的按鈕。請幫助我。謝謝! –

回答

0

「但我仍然不知道如何訪問我添加的新片段的按鈕。」

那麼你總是可以參考該按鈕是這樣的:

_btnAboutUs = (Button)FindViewById (Resource.Id.btnAboutUs); 

但也許使用片段中的按鈕,以取代片段按鈕本身是,是不是最好的一段路要走。 爲什麼不把按鈕放在Activity1中,以便您可以使用它的fragmentManager來替換片段。一個片段沒有fragmentManager,但是一個活動。

1

嘗試先通過膨脹視圖來訪問按鈕,然後返回它。 例如:

View view = p0.Inflate(Resource.Layout.fragment_layout, p1, false); 

// now we can access button, textview etc... in the layout 

_btnAboutUs = (Button)view.FindViewById(Resource.Id.btnAboutUs); 

return view; 
相關問題