1

画面にヘッダー付きのリストビューを表示したいと思います。

私の XML ファイルにはリストビューがあり、そのすぐ上にヘッダーとして使用されているイメージビューがあります。

これを実行すると、エラーが発生します。私は何十ものチュートリアルを経験しましたが、何が間違っているのかわかりません。私は Stackoverflow を検索し、すべてのソリューションを試しましたが、喜びはありませんでした。誰でも私を助けてもらえますか?

注: 私は Actionbarsherlock を使用しているため、私のクラスは SherlockListActivity を拡張します。ListActivity でこれを試してみましたが、同じ問題が発生しました。リストビューが読み込まれるかどうかを確認するために、イメージをインスタンス化せずに実行しようとしましたが、それでも同じエラーが発生します。

以下の XML とコードを参照してください。

私のXML

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

<ImageView
    android:id="@+id/headerimage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/header" >
</ImageView>

<ListView
    android:id="@+id/mylist"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>

私のコード:

public class MainActivity extends SherlockListActivity {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ImageView header = (ImageView) findViewById(R.id.headerimage);
    ListView listView = (ListView) findViewById(R.id.mylist);
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
    "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
    "Linux", "OS/2" };

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, android.R.id.text1, values);

        listView.addHeaderView(header);
    listView.setAdapter(adapter);




}

エラーログ

E/AndroidRuntime(10642): FATAL EXCEPTION: main
E/AndroidRuntime(10642): java.lang.RuntimeException: Unable to start activity ComponentInfo{ttj.android.t3w/ttj.android.t3w.MainActivity}: java.lang.NullPointerException
E/AndroidRuntime(10642):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968)
E/AndroidRuntime(10642):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
E/AndroidRuntime(10642):    at android.app.ActivityThread.access$600(ActivityThread.java:127)
E/AndroidRuntime(10642):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
E/AndroidRuntime(10642):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(10642):    at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(10642):    at android.app.ActivityThread.main(ActivityThread.java:4507)
E/AndroidRuntime(10642):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(10642):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(10642):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
E/AndroidRuntime(10642):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
E/AndroidRuntime(10642):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(10642): Caused by: java.lang.NullPointerException
E/AndroidRuntime(10642):    at ttj.android.t3w.MainActivity.onCreate(MainActivity.java:40)
E/AndroidRuntime(10642):    at android.app.Activity.performCreate(Activity.java:4465)
E/AndroidRuntime(10642):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
E/AndroidRuntime(10642):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
E/AndroidRuntime(10642):    ... 11 more
4

4 に答える 4

3

セット ヘッダーとセット フッターは、膨張したレイアウトを取ります。つまり、ヘッダー用に別のレイアウトを作成し、それを膨らませます。セット コンテンツ ビューに似ていますが、インフレは自動的には起こりません。ここではありませんが、明らかに、リストアダプターを設定する前にヘッダーとフッターを設定する必要があります。時間ができたら、いくつかのコードを投稿してみます。

于 2012-06-12T00:53:28.730 に答える
2

cstruttonは正しい。setConentView を呼び出していません。呼び出しsetContentView(R.layout.xmlfilename)の直後に呼び出す必要があります。super.onCreate(savedInstanceState);

xmlfilenameレイアウト ファイルの名前はどこですか

于 2012-06-12T00:57:35.977 に答える
0

setContentView(id)リスト アクティビティ、およびListView拡張するべきListActivityor ListFragment(または適切なサブクラス) を組み込んだアクティビティで使用する必要があります。

cstrutton へのコメントで、次のように述べています。

setcontentview を使用すると、次のエラーが表示されます。

これは、ListView の ID が正しくないためです。ListActivity ではListView、関連付けられたレイアウト ファイルに最大 1 つの ID が存在する必要があり、その ID は@android:id/list(おそらく、Android が ListView の場所を認識できるようにするためですが、理由はわかりません)要素タグからは検出できません。おそらくパフォーマンス上の理由から、特定の ID を要求する方が簡単です)。

に変更@+id/list@android:id/listます。(なぜそれがではなく、この質問を参照してください)@android:id@+id

クラス拡張を使用する理由は他にもあると思いますがListActivity、それらの多くは便利なメソッドのためですが、多くは最適化のためだと思います。

前へ、上へ!

于 2012-12-25T23:40:17.417 に答える
-1

修繕。

アクティビティは ListActivity を拡張しないでください。アクティビティに変更したところ、問題はなくなりました。

于 2012-06-12T01:54:38.593 に答える