ページ 1 / 1
androidプログラミングで質問です
Posted: 2013年2月03日(日) 20:52
by ひよつこ
どうも、こんにちは。
さっそくですが質問させていただきます。
現在ListViewにaddHeaderView()でヘッダーをつけようとしています。
しかし、
mListView = (ListView) findViewById(リストビューのID);
mListView.addHeaderView(new ListView(this));
とするとエラーが発生しませんが、
mListView = (ListView) findViewById(リストビューのID);
mHeader = findViewById(ヘッダーのID);
mListView.addHeaderView(mHeader);
とすると強制終了します。
Eclipseでも特にミスは指摘されません。
いったい何が原因なのでしょうか。
※WindowsでEclipseを使っています。
Re: androidプログラミングで質問です
Posted: 2013年2月03日(日) 21:21
by beatle
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プログラミングで質問です
Posted: 2013年2月07日(木) 23:22
by ひよつこ
返信ありがとうございます。
早速、getLayoutInflater().inflate(ヘッダーのID,null)で実行してみましたが、
また強制終了してしまいました。
LogCatをみたところ
Resource ID ヘッダーのID type #0x12 is not valid
とあり NotFoundException が投げられているようです。
どうか解決よろしくお願いします。
Re: androidプログラミングで質問です
Posted: 2013年2月08日(金) 00:18
by ISLe
LayoutInflater#inflateにはレイアウトのIDを指定します。
Re: androidプログラミングで質問です
Posted: 2013年2月09日(土) 11:46
by ひよつこ
返信ありがとうございます。
inflate(レイアウトのID,null)としたところ強制終了せずに実行できました。
しかし、ヘッダーにリスナーをつけられなくなりました。
レイアウトをヘッダーにしてしまうとonClickListenerなどのリスナーを設定できないのでしょうか。
Re: androidプログラミングで質問です
Posted: 2013年2月09日(土) 17:04
by ISLe
ひよつこ さんが書きました:しかし、ヘッダーにリスナーをつけられなくなりました。
レイアウトをヘッダーにしてしまうとonClickListenerなどのリスナーを設定できないのでしょうか。
LayoutInflater#inflateが返すViewインスタンスをたどればヘッダーのインスタンスを取得できます。
コード:
mHeaderLayout = getLayoutInflater().inflate([ヘッダーを含むレイアウトのID], null);
mHeader = mHeaderLayout.findViewById([ヘッダーのID]);
こんな感じでヘッダーのViewインスタンスを取得できるはずなので、mHeaderにリスナーを登録します。
Re: androidプログラミングで質問です
Posted: 2013年2月09日(土) 19:16
by ひよつこ
返信ありがとうございます。
無事にヘッダーを表示し、リスナーをつけることができました。
そこで、あと一つだけ質問したいのですが、
登録したヘッダーの表示,非表示を動的に変えることはできるでしょうか。
mHeader.setVisibility(View.GONE) としてもListViewに空欄が残ってしまいます。
なので、空欄も残らない方法はあるのでしょうか。
Re: androidプログラミングで質問です
Posted: 2013年2月09日(土) 22:54
by ISLe
ListViewのヘッダはヘッダといってもリストアイテムのひとつなので、取り除くにはListView#removeHeaderViewを使うしかないと思います。
動的にレイアウトを変えたいなら、ListViewと並列に別のViewをヘッダとして配置するのが良いと思います。
Re: androidプログラミングで質問です
Posted: 2013年2月10日(日) 20:46
by ひよつこ
返信ありがとうございます。
removeHeaderView()では再びヘッダーを表示することができなくなってしまうのではないでしょうか。
また、ListViewと並列に別のViewを…というのはどういうことでしょうか。
Re: androidプログラミングで質問です
Posted: 2013年2月10日(日) 23:45
by ISLe
ひよつこ さんが書きました:removeHeaderView()では再びヘッダーを表示することができなくなってしまうのではないでしょうか。
再び表示したいときはaddHeaderViewすることになります。
ひよつこ さんが書きました:また、ListViewと並列に別のViewを…というのはどういうことでしょうか。
ListViewを配置したレイアウトがありますよね。
そのレイアウトで、ListViewの上にViewを配置してそのViewをヘッダの代わりにするということです。
Re: androidプログラミングで質問です
Posted: 2013年2月11日(月) 17:00
by ひよつこ
返信ありがとうございます。
目的の動作をさせることができました。
次回もよろしくお願いします。