どうも、こんにちは。
さっそくですが質問させていただきます。
現在ListViewにaddHeaderView()でヘッダーをつけようとしています。
しかし、
mListView = (ListView) findViewById(リストビューのID);
mListView.addHeaderView(new ListView(this));
とするとエラーが発生しませんが、
mListView = (ListView) findViewById(リストビューのID);
mHeader = findViewById(ヘッダーのID);
mListView.addHeaderView(mHeader);
とすると強制終了します。
Eclipseでも特にミスは指摘されません。
いったい何が原因なのでしょうか。
※WindowsでEclipseを使っています。
androidプログラミングで質問です
Re: androidプログラミングで質問です
Android ListView addHeaderView() nullPointerException for predefined Views
が参考になります。
上記URLの解答の内容によると、結論から言うと
は出来ないそうです。
解答を参考にすれば、以下のように修正することで動くらしいです。 お試しあれ。
が参考になります。
上記URLの解答の内容によると、結論から言うと
mListView = (ListView) findViewById(リストビューのID);
mHeader = findViewById(ヘッダーのID);
mListView.addHeaderView(mHeader);
解答を参考にすれば、以下のように修正することで動くらしいです。 お試しあれ。
-
ひよつこ
Re: androidプログラミングで質問です
返信ありがとうございます。
早速、getLayoutInflater().inflate(ヘッダーのID,null)で実行してみましたが、
また強制終了してしまいました。
LogCatをみたところ
Resource ID ヘッダーのID type #0x12 is not valid
とあり NotFoundException が投げられているようです。
どうか解決よろしくお願いします。
早速、getLayoutInflater().inflate(ヘッダーのID,null)で実行してみましたが、
また強制終了してしまいました。
LogCatをみたところ
Resource ID ヘッダーのID type #0x12 is not valid
とあり NotFoundException が投げられているようです。
どうか解決よろしくお願いします。
Re: androidプログラミングで質問です
LayoutInflater#inflateにはレイアウトのIDを指定します。
-
ひよつこ
Re: androidプログラミングで質問です
返信ありがとうございます。
inflate(レイアウトのID,null)としたところ強制終了せずに実行できました。
しかし、ヘッダーにリスナーをつけられなくなりました。
レイアウトをヘッダーにしてしまうとonClickListenerなどのリスナーを設定できないのでしょうか。
inflate(レイアウトのID,null)としたところ強制終了せずに実行できました。
しかし、ヘッダーにリスナーをつけられなくなりました。
レイアウトをヘッダーにしてしまうとonClickListenerなどのリスナーを設定できないのでしょうか。
Re: androidプログラミングで質問です
LayoutInflater#inflateが返すViewインスタンスをたどればヘッダーのインスタンスを取得できます。ひよつこ さんが書きました:しかし、ヘッダーにリスナーをつけられなくなりました。
レイアウトをヘッダーにしてしまうとonClickListenerなどのリスナーを設定できないのでしょうか。
こんな感じでヘッダーのViewインスタンスを取得できるはずなので、mHeaderにリスナーを登録します。
-
ひよつこ
Re: androidプログラミングで質問です
返信ありがとうございます。
無事にヘッダーを表示し、リスナーをつけることができました。
そこで、あと一つだけ質問したいのですが、
登録したヘッダーの表示,非表示を動的に変えることはできるでしょうか。
mHeader.setVisibility(View.GONE) としてもListViewに空欄が残ってしまいます。
なので、空欄も残らない方法はあるのでしょうか。
無事にヘッダーを表示し、リスナーをつけることができました。
そこで、あと一つだけ質問したいのですが、
登録したヘッダーの表示,非表示を動的に変えることはできるでしょうか。
mHeader.setVisibility(View.GONE) としてもListViewに空欄が残ってしまいます。
なので、空欄も残らない方法はあるのでしょうか。
Re: androidプログラミングで質問です
ListViewのヘッダはヘッダといってもリストアイテムのひとつなので、取り除くにはListView#removeHeaderViewを使うしかないと思います。
動的にレイアウトを変えたいなら、ListViewと並列に別のViewをヘッダとして配置するのが良いと思います。
動的にレイアウトを変えたいなら、ListViewと並列に別のViewをヘッダとして配置するのが良いと思います。
-
ひよつこ
Re: androidプログラミングで質問です
返信ありがとうございます。
removeHeaderView()では再びヘッダーを表示することができなくなってしまうのではないでしょうか。
また、ListViewと並列に別のViewを…というのはどういうことでしょうか。
removeHeaderView()では再びヘッダーを表示することができなくなってしまうのではないでしょうか。
また、ListViewと並列に別のViewを…というのはどういうことでしょうか。
Re: androidプログラミングで質問です
再び表示したいときはaddHeaderViewすることになります。ひよつこ さんが書きました:removeHeaderView()では再びヘッダーを表示することができなくなってしまうのではないでしょうか。
ListViewを配置したレイアウトがありますよね。ひよつこ さんが書きました:また、ListViewと並列に別のViewを…というのはどういうことでしょうか。
そのレイアウトで、ListViewの上にViewを配置してそのViewをヘッダの代わりにするということです。