androidプログラミングで質問です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ひよつこ

androidプログラミングで質問です

#1

投稿記事 by ひよつこ » 13年前

どうも、こんにちは。
さっそくですが質問させていただきます。

現在ListViewにaddHeaderView()でヘッダーをつけようとしています。
しかし、
mListView = (ListView) findViewById(リストビューのID);
mListView.addHeaderView(new ListView(this));
とするとエラーが発生しませんが、
mListView = (ListView) findViewById(リストビューのID);
mHeader = findViewById(ヘッダーのID);
mListView.addHeaderView(mHeader);
とすると強制終了します。
Eclipseでも特にミスは指摘されません。
いったい何が原因なのでしょうか。

※WindowsでEclipseを使っています。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: androidプログラミングで質問です

#2

投稿記事 by beatle » 13年前

Android ListView addHeaderView() nullPointerException for predefined Views
が参考になります。

上記URLの解答の内容によると、結論から言うと

コード:

mListView = (ListView) findViewById(リストビューのID);
mHeader = findViewById(ヘッダーのID);
mListView.addHeaderView(mHeader);
は出来ないそうです。

解答を参考にすれば、以下のように修正することで動くらしいです。

コード:

mListView = (ListView) findViewById(リストビューのID);
mHeader = getLayoutInflater().inflate(ヘッダーのID,null); // この行を修正。getLayoutInflater()を使う。
mListView.addHeaderView(mHeader);
お試しあれ。

ひよつこ

Re: androidプログラミングで質問です

#3

投稿記事 by ひよつこ » 13年前

返信ありがとうございます。
早速、getLayoutInflater().inflate(ヘッダーのID,null)で実行してみましたが、
また強制終了してしまいました。

LogCatをみたところ
Resource ID ヘッダーのID type #0x12 is not valid
とあり NotFoundException が投げられているようです。

どうか解決よろしくお願いします。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: androidプログラミングで質問です

#4

投稿記事 by ISLe » 13年前

LayoutInflater#inflateにはレイアウトのIDを指定します。

ひよつこ

Re: androidプログラミングで質問です

#5

投稿記事 by ひよつこ » 13年前

返信ありがとうございます。

inflate(レイアウトのID,null)としたところ強制終了せずに実行できました。
しかし、ヘッダーにリスナーをつけられなくなりました。
レイアウトをヘッダーにしてしまうとonClickListenerなどのリスナーを設定できないのでしょうか。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: androidプログラミングで質問です

#6

投稿記事 by ISLe » 13年前

ひよつこ さんが書きました:しかし、ヘッダーにリスナーをつけられなくなりました。
レイアウトをヘッダーにしてしまうとonClickListenerなどのリスナーを設定できないのでしょうか。
LayoutInflater#inflateが返すViewインスタンスをたどればヘッダーのインスタンスを取得できます。

コード:

mHeaderLayout = getLayoutInflater().inflate([ヘッダーを含むレイアウトのID], null);
mHeader = mHeaderLayout.findViewById([ヘッダーのID]);
こんな感じでヘッダーのViewインスタンスを取得できるはずなので、mHeaderにリスナーを登録します。

ひよつこ

Re: androidプログラミングで質問です

#7

投稿記事 by ひよつこ » 13年前

返信ありがとうございます。
無事にヘッダーを表示し、リスナーをつけることができました。

そこで、あと一つだけ質問したいのですが、
登録したヘッダーの表示,非表示を動的に変えることはできるでしょうか。
mHeader.setVisibility(View.GONE) としてもListViewに空欄が残ってしまいます。
なので、空欄も残らない方法はあるのでしょうか。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: androidプログラミングで質問です

#8

投稿記事 by ISLe » 13年前

ListViewのヘッダはヘッダといってもリストアイテムのひとつなので、取り除くにはListView#removeHeaderViewを使うしかないと思います。

動的にレイアウトを変えたいなら、ListViewと並列に別のViewをヘッダとして配置するのが良いと思います。

ひよつこ

Re: androidプログラミングで質問です

#9

投稿記事 by ひよつこ » 13年前

返信ありがとうございます。

removeHeaderView()では再びヘッダーを表示することができなくなってしまうのではないでしょうか。
また、ListViewと並列に別のViewを…というのはどういうことでしょうか。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: androidプログラミングで質問です

#10

投稿記事 by ISLe » 13年前

ひよつこ さんが書きました:removeHeaderView()では再びヘッダーを表示することができなくなってしまうのではないでしょうか。
再び表示したいときはaddHeaderViewすることになります。
ひよつこ さんが書きました:また、ListViewと並列に別のViewを…というのはどういうことでしょうか。
ListViewを配置したレイアウトがありますよね。
そのレイアウトで、ListViewの上にViewを配置してそのViewをヘッダの代わりにするということです。

ひよつこ

Re: androidプログラミングで質問です

#11

投稿記事 by ひよつこ » 13年前

返信ありがとうございます。
目的の動作をさせることができました。
次回もよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る