android“无法执行活动的方法”NullPointerException,但为什么呢?

时间:2012-09-25 22:59:12

标签: android nullpointerexception android-linearlayout

在最初只有标题和“+” - 按钮的活动中,我想在每次单击按钮时添加包含更多视图的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)。

2 个答案:

答案 0 :(得分:-1)

尝试改变 <android:visibility="gone"><android:visibility="invisible">

我相信gone属性会强制它在布局过程中被完全忽略,您希望它布局但不可见。

答案 1 :(得分:-1)

不要夸大新的Scrollview实例,只需操纵附加到您活动的实际Scrollview。

所以将所有scrollview.findViewById()layout.findViewById()更改为只调用findViewById()而没有预先修复的限定符。这样,您将获得用户在按下按钮时正在查看的实际布局对象的引用。