2

2 つのリストを含むレイアウトがあります。リストを に入れることはできないので、この質問に従ってカスタムでScrollViewを使用しようとしています。 リストのレイアウト:ExpandableListViewSimpleExpandableListAdapter

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <ExpandableListView android:id="@+id/android:list"
        android:layout_width="fill_parent" android:layout_height="fill_parent" />
</LinearLayout>

さて、ヘッダーとして何かを追加しようとすると問題が発生します。次のように、コードからレイアウトを作成すると機能します。

LinearLayout ll = new LinearLayout( this );
ll.setOrientation( LinearLayout.VERTICAL );
TextView t = new TextView( this );
t.setText( "some text" );
ll.addView( t );
ImageView i = new ImageView( this );
i.setImageResource( R.drawable.icon );
ll.addView( i );
getExpandableListView( ).addHeaderView( ll );

同じレイアウトを使用するか、コードのレイアウトよりも単純なレイアウトを使用すると、アプリケーションは画面に表示される前にクラッシュします。上記のリストにヘッダーとして追加したいレイアウトは次のとおりです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:orientation="vertical" android:id="@+id/ll">
        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="some text"/>
        <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:src="@drawable/icon"/>
</LinearLayout>

そしてコード:

LinearLayout ll = (LinearLayout)findViewById( R.id.ll );
getExpandableListView( ).addHeaderView( ll );

レイアウト内のほぼすべてのコンポーネントの layout_width または height をいじろうとしましたが、うまくいきません。私を最も困惑させるのは、それがクラッシュしたとき、DDMS でNullPointerExceptionsetAdapter を呼び出すときに言うことです (コードからレイアウトを使用するときはそうではなく、アダプターを正常に追加します):

01-16 01:17:27.447: ERROR/AndroidRuntime(21314): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.stephan.test/org.stephan.test.ExpandableListViewTest}: java.lang.NullPointerException
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2833)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2854)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.app.ActivityThread.access$2300(ActivityThread.java:136)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2179)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.os.Looper.loop(Looper.java:143)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.app.ActivityThread.main(ActivityThread.java:5068)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at java.lang.reflect.Method.invokeNative(Native Method)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at java.lang.reflect.Method.invoke(Method.java:521)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at dalvik.system.NativeStart.main(Native Method)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314): Caused by: java.lang.NullPointerException
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.widget.ListView.clearRecycledState(ListView.java:506)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.widget.ListView.resetList(ListView.java:492)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.widget.ListView.setAdapter(ListView.java:424)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.widget.ExpandableListView.setAdapter(ExpandableListView.java:475)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.app.ExpandableListActivity.setListAdapter(ExpandableListActivity.java:246)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at org.stephan.test.ExpandableListViewTest.onCreate(ExpandableListViewTest.java:80)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1066)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2797)
01-16 01:17:27.447: ERROR/AndroidRuntime(21314):     ... 11 more

だから、私の質問は、ここで何が間違っているのですか? そして、場合によっては、これをより良くする方法について何かアドバイスはありますか?

4

2 に答える 2

5

解決策を見つけました。で新しいレイアウトを作成する代わりに、
LinearLayout ll = (LinearLayout)findViewById( R.id.ll );
それを膨らませる必要があります! 以下はトリックを行います:

LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService( Context.LAYOUT_INFLATER_SERVICE );  
LinearLayout ll = (LinearLayout)layoutInflater.inflate( R.layout.ll, null, false );
getExpandableListView( ).addHeaderView( ll );

ll.xml は、ヘッダーとしてリストに添付する予定のレイアウトです。これが他の誰かに役立つことを願っています! :)

于 2011-01-16T17:34:53.233 に答える
0

ExpandableListActivity には、中央に配置された単一のフルスクリーンの展開可能なリストで構成されるデフォルトのレイアウトがあります。ただし、必要に応じて、onCreate() の setContentView() で独自のビュー レイアウトを設定することにより、画面レイアウトをカスタマイズできます。これを行うには、独自のビューに ID "@android:id/list" (コード内の場合はリスト) を持つ ExpandableListView オブジェクトが含まれている必要があります。

http://developer.android.com/reference/android/app/ExpandableListActivity.html

そのため、カスタム レイアウトで id を からllに変更し@android:id/listます。setContentViewまた、カスタム レイアウト ファイルを使用して呼び出します。

あなたが何をしようとしているのかよくわかりませんでしたが、もっと詳しく説明していただければ、さらにお役に立てるかもしれません。(私の見方では、リストビューを取得してから、そのリストビューをヘッダーに追加したいようです...奇妙です)

編集:

次のレイアウトを使用してみてください。

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:paddingLeft="8dp"
         android:paddingRight="8dp">

    <LinearLayout 
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:orientation="vertical" android:id="@+id/ll">
            <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:text="some text"/>
            <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:src="@drawable/icon"/>
    </LinearLayout>

     <ListView android:id="@id/android:list"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="#00FF00"

               android:drawSelectorOnTop="false"/>

     <TextView android:id="@id/android:empty"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="#FF0000"
               android:text="No data"/>
 </LinearLayout>
于 2011-01-16T00:43:24.463 に答える