1

最初はタイトルと「+」ボタンしかないアクティビティで、ボタンをクリックするたびに、さらにいくつかのビューを含むLinearLayoutsを追加したいと思います。

これを解決する方法が特にわからないので、次のことを試してみました。追加するLinearLayoutは最大7つあるため、layout-xml-fileに追加し、すべてを次のように設定しました。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があります。これは、ボタンをクリックして次々に表示するように設定する7つのものです。

今、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行にaで言及されたエラーを与えます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)アクティビティtitle-TextViewでテストしました)。だから今、私はこれが私にこれをもたらしている理由が本当にわかりませんNullPointerException。私は本当に明白な何かを見落としていますか?または、私の目標を達成するためのより良い方法はありますか?注:このLinearLayoutを追加する必要があるだけでなく、後でいくつかの値も読み取る必要があります(各LinearLayoutには2つのEditTextがあります)。

4

2 に答える 2

-1

に変更 <android:visibility="gone"> して みてください<android:visibility="invisible">

このgone属性により、レイアウト中に完全に無視されるようになると思います。レイアウトしたいが表示されないようにしたいと考えています。

于 2012-09-25T23:28:07.337 に答える
-1

新しい Scrollview インスタンスをインフレートする代わりに、アクティビティにアタッチされた実際の Scrollview を操作するだけです。

したがって、すべてのscrollview.findViewById()andを、事前に固定された修飾子のないlayout.findViewById()への呼び出しだけに変更します。findViewById()このようにして、ユーザーがボタンを押したときに表示されている実際のレイアウト オブジェクトへの参照を取得します。

于 2012-09-25T23:28:33.377 に答える