我真的不能想到一个好的问题标题。对不起。
这是我的问题: 我有我的主要活动:
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>
现在,Activity2看起来像这样:
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>
此代码使用Xamarin在C#中。
现在,我想要做的就是访问fragment_layout中的按钮并使用它来替换Activity1中的片段(我的主要活动)。我正在使用它来避免为每个简单的事情创建新的活动,比如显示某些内容的细节,但我也不能使用任何弹出窗口。
我无法访问我在主FragmentActivity中加载的片段上的按钮,我可以用另一个片段替换它。救命!谢谢!任何其他改进或建议也欢迎。
答案 0 :(得分: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;
答案 1 :(得分:0)
&#34;但我仍然不知道如何访问我添加的新片段的按钮。&#34;
嗯,你总是可以像这样引用那个按钮:
_btnAboutUs = (Button)FindViewById (Resource.Id.btnAboutUs);
但也许使用片段内的按钮来替换按钮本身所在的片段,这不是最好的方法。 为什么不将按钮放在Activity1中,这样你就可以使用它的fragmentManager来替换片段。片段没有fragmentManager,但活动有。