如何解决Xamarin Android从片段实例获取视图
这是我的xml文件
<LinearLayout
android:orientation="vertical"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="40dp"
android:id="@+id/MainPersonalIDLayout">
<TextView
android:text="Personal ID"
android:textSize="18dp"
android:textColor="#000"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:id="@+id/PersonalIDTitle" />
<LinearLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:id="@+id/SubPersonalIDLayout">
<TextView
android:text="No ID"
android:textSize="20dp"
android:gravity="center"
android:layout_width="200dp"
android:layout_height="match_parent"
android:id="@+id/PersonalID" />
<Button
android:text="Use this"
android:textAllCaps="false"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="UsePersonalID"
android:id="@+id/UsePersonalID" />
</LinearLayout>
</LinearLayout>
这是我的仪表板片段
public class DashboardTab : Fragment
{
View DashboardView;
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your fragment here
}
public override View OnCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
{
// Use this to return your custom view for this Fragment
// return inflater.Inflate(Resource.Layout.YourFragment,container,false);
DashboardView = inflater.Inflate(Resource.Layout.Dashboard,false);
return DashboardView;
}
}
这是我的MainActivity.cs,我创建了仪表板片段的一个实例
SetContentView(Resource.Layout.activity_main);
DashboardTab Dashboard = new DashboardTab();
TextView PersonalIDHolder = Dashboard.View.FindViewById<TextView>(Resource.Id.PersonalID);
这是我跑步时显示的错误 System.NullReferenceException:'对象引用未设置为对象的实例。'
是否可以从Fragment实例获取视图?
Android get view of fragment in activity
谢谢
解决方法
答案是肯定的。我不知道如何获取片段的实例,但是有一种方法可以通过FindFragmentByTag
获取片段。
添加片段时,您可以执行以下操作:
SupportFragmentManager
.BeginTransaction()
.Add(Resource.Id.settingsContainer,new DashboardTab(),"DashboardTab")
.Commit();
然后在Activity OnResume()
或OnStart()
方法中获取DashboardTab fragemnt:
protected override void OnResume()
{
base.OnResume();
DashboardTab Dashboard = SupportFragmentManager.FindFragmentByTag("DashboardTab");
TextView textView = Dashboard.View.FindViewById<TextView>(Resource.Id.PersonalID);
}
,
是的,您将获得System.NullReferenceException,因为您尝试在活动的onCreate方法中访问片段的视图,并且到目前为止,片段视图尚未初始化。
在Fragment的OnCreateView方法中更新视图
public override View OnCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
{
var DashboardView = inflater.Inflate(Resource.Layout.Dashboard,container,false);
TextView textView = View.FindViewById<TextView>(Resource.Id.PersonalID);
return DashboardView;
}
或者,如果您的更改取决于片段所附加到的“活动”,则可以使用片段的OnActivityCreated方法。
public override void OnActivityCreated(Bundle savedInstanceState)
{
base.OnActivityCreated(savedInstanceState);
TextView textView = View.FindViewById<TextView>(Resource.Id.PersonID);
var act = (MainActivity)Activity;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。