在最初只有标题和“+” - 按钮的活动中,我想在每次单击按钮时添加包含更多视图的LinearLayouts。
我不知道如何解决这个问题,所以我尝试了以下方法:
最多要添加七个LinearLayouts,因此我将它们添加到layout-xml文件中并将它们全部设置为android:visibility="gone"
这是我的layout-xml-file:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="15dp"
android:paddingRight="15dp" >
<LinearLayout
android:id="@+id/layout_ppe2"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
(...)
<Button
android:id="@+id/bt_ppe2_newset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClickAddNewSet"
android:text="@string/plus"
/>
(...)
<LinearLayout
android:id="@+id/lin_ppe2_2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:orientation="horizontal"
android:visibility="gone">
(...)
</LinearLayout>
<LinearLayout
android:id="@+id/lin_ppe2_3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:orientation="horizontal"
android:visibility="gone">
(...)
</LinearLayout>
(...)
</LinearLayout>
</ScrollView>
有LinearLayouts lin_ppe2_2 - lin_ppe2_8,它们是通过点击按钮一个接一个地设置可见的七个。
现在在onClickAddNewSet
我得到了关注(int counter
已初始化= 1):
public void onClickAddNewSet(View v){
ScrollView scrollView = (ScrollView) getLayoutInflater().inflate(R.layout.all_completed_bets, null);
LinearLayout layout = (LinearLayout) scrollView.findViewById(R.id.layout_ppe2);
LinearLayout layout2 = null;
switch(counter){
case 1:
layout2 = (LinearLayout) layout.findViewById(R.id.lin_ppe2_2);
break;
case 2:
layout2 = (LinearLayout) layout.findViewById(R.id.lin_ppe2_3);
break;
case 3:
layout2 = (LinearLayout) layout.findViewById(R.id.lin_ppe2_4);
break;
case 4:
layout2 = (LinearLayout) layout.findViewById(R.id.lin_ppe2_5);
break;
case 5:
layout2 = (LinearLayout) layout.findViewById(R.id.lin_ppe2_6);
break;
case 6:
layout2 = (LinearLayout) layout.findViewById(R.id.lin_ppe2_7);
break;
case 7:
layout2 = (LinearLayout) layout.findViewById(R.id.lin_ppe2_8);
break;
}
if(counter>0 && counter <8){
layout2.setVisibility(LinearLayout.VISIBLE);
}
counter++;
}
这总是在NullPointerException
行的layout2.setVisibility(LinearLayout.VISIBLE);
处提到错误。我也试过
LinearLayout layout = (LinearLayout) scrollView.findViewById(R.id.layout_ppe2);
LinearLayout layout2 = (LinearLayout) layout.findViewById(R.id.lin_ppe2_2);
layout2.setVisibility(LinearLayout.VISIBLE);
检查是否发生错误,因为layout2初始化为null,但计数器工作正常(我用setText(counter)
测试它到活动标题-TextView)。所以现在我真的不知道为什么这会让我这个NullPointerException
。我忽略了一些非常明显的事情吗还是有更好的方法来实现我的目标?注意:我不仅要添加这个LinearLayouts,稍后我必须读出一些值(每个LinearLayout中有2个EditText)。
答案 0 :(得分:-1)
尝试改变
<android:visibility="gone">
至
<android:visibility="invisible">
我相信gone
属性会强制它在布局过程中被完全忽略,您希望它布局但不可见。
答案 1 :(得分:-1)
不要夸大新的Scrollview实例,只需操纵附加到您活动的实际Scrollview。
所以将所有scrollview.findViewById()
和layout.findViewById()
更改为只调用findViewById()
而没有预先修复的限定符。这样,您将获得用户在按下按钮时正在查看的实际布局对象的引用。