我有一个ScrollView添加到FrameLayout。在一个按钮中,单击我从FrameLayout中删除ScrollView并添加一个从ViewGroup派生的元素。如果再次单击该按钮,则将删除ViewGroup,并重新添加ScrollView。在删除ViewGroup之后将ScrollView重新添加回FrameLayout时,我从FrameLayout的AddView方法中得到以下异常。实际上,它是从ViewGroup类的AddView()方法抛出的,因为FrameLayout是从ViewGroup派生的。
未处理的异常:
Java.Lang.NullPointerException:尝试调用虚拟方法'void 空对象引用上的android.view.View.resolveLayoutParams()' 发生
我已经尝试切换两个视图的可见性,而不是添加一个视图并删除另一个视图。但是在切换可见性之后,每次调用FrameLayout的OnLayout时,例如当出现Android键盘或设备方向发生更改时,应用程序都会崩溃。
很抱歉,我无法提供代码。因为我的代码非常复杂,所以我无法在一个简单的示例中重现此问题。我刚刚将此问题发布为不得已。
我知道,如果不包含代码,则不可能获得解决方案。但是,与此问题相关的任何输入都会有所帮助。
答案 0 :(得分:0)
由于您无法在此处提供代码,因此我只能编写部分代码以显示您的要求:
在xaml中,我将ScrolView(及其子级)和LinearLayout(作为ViewGroup)添加到FrameLayout中:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/framelayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above = "@+id/click"
>
<ScrollView
android:id="@+id/scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text ="text in scrollview"
/>
</LinearLayout>
</ScrollView>
<LinearLayout
android:id="@+id/linearlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text ="text iFn LinearLayout"
/>
</LinearLayout>
</FrameLayout>
<Button
android:id = "@+id/click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click"
android:layout_alignParentBottom="true"
/>
</RelativeLayout>
在活动中,通过单击按钮显示和隐藏Scrolview和LinearLayout:
private int num = 1;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
Button button = FindViewById<Button>(Resource.Id.click);
FrameLayout frameLayout = FindViewById<FrameLayout>(Resource.Id.framelayout);
ScrollView scrollView = FindViewById<ScrollView>(Resource.Id.scroll);
LinearLayout linearLayout = FindViewById<LinearLayout>(Resource.Id.linearlayout);
button.Click += delegate
{
if (num % 2 ==0)
{
scrollView.Visibility = Android.Views.ViewStates.Gone;
linearLayout.Visibility = Android.Views.ViewStates.Visible;
}
else
{
linearLayout.Visibility = Android.Views.ViewStates.Gone;
scrollView.Visibility = Android.Views.ViewStates.Visible;
}
num++;
};
}