質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

2249閲覧

twitterのようなUIの実装方法について

退会済みユーザー

退会済みユーザー

総合スコア0

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/06/25 09:22

現在、TwitterのタイムラインのようなUIを持つアプリを開発しておりまして、実装方法に悩んでおります。

あるユーザを選択した時に、ヘッダー部分にユーザのアイコンや自己紹介文を表示し、
その下には、当該ユーザのコメントリストが並ぶというありきたりのUIとなります。
また、ヘッダ部分は位置が固定ではなく、コメントリストのスクロールと共に
上部へスライドしていくというものになります。

そこで、単にListViewを用いて一度実装を行いました。
ArrayAdapterのgetViewをオーバーライドして、
positionが0、つまりヘッダ部分のみ異なるレイアウトファイルを適用し、
それ以外のpositionについては、コメントを表示するためのレイアウトファイルを適用して、
当初予定していたUIは実装が行えました。

その後、これを拡張することになり、ヘッダ部分内にタブ切り替えのようなボタンを配置し、
選択されたボタンにより、下位のリスト内容をごっそり切り替えるということになりました。
デフォルトでは、コメントリストなのですが、切り替えボタンを押すと、
内容もレイアウトも全く異なるものを表示することになります。
(例えば、当該ユーザがフォローしている他ユーザの一覧等。リスト形式であることには変わりません)

ヘッダ部分の内容は全く変更せず(ただし、選択されたボタンはハイライト化)、
positionが1以降のリストを、内容もレイアウトも異なるものに切り替えるために、
皆さんならどのように実装されるかご意見をお聞かせ願えないでしょうか。
要件として、ヘッダー部のスクロール位置の変更はしないという制限があります。
(例えばちょっとだけスクロールしていて、一部が隠れている状態での切替時)

私が今考えているのは、getViewの中で、現在positionが0かそれ以外で
レイアウトファイルを切り替えるだけでなく、さらにどの切替ボタンが選択されているかで、
適用するレイアウトファイルを増やすというものなのですが、何か強引な感じがして・・・
もっとスマートな方法がございましたら、ご教示いただきたく。
(違うアクティビティなり、フラグメントに切り替えて、前画面と同じ位置にスクロールさせる等?)

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

その後、もう少しListViewについて調査してみたところ、そもそもヘッダやフッタを追加するaddHeaderView()やaddFooterView()なるド‌​ンピシャなメソッドが存在していたのですね・・・
こちらを利用して書き換えてみます。
http://binzume.net/diary/2011-03-19:A3
もう、まさにここでダメな例として挙げられている方法で実装しておりました。

投稿2015/06/29 07:29

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

terushu

2015/07/09 13:07

記事で書かれているダメな例は、positionで判定しているからではなく、毎回Viewのインスタンスを作成しているからダメですね。 convertViewが何故渡されているのかを全く理解していない人が書くコードだからダメなわけであって、positionで分岐させるという手法がダメなわけではないです。
退会済みユーザー

退会済みユーザー

2015/07/14 05:26

ああ、なるほど。確かにそうですね。 そういう意味でのダメ例として紹介されていたのですね。 その後、addHeaderViewでヘッダ部分を追加し、ヘッダ内にあるラジオボタンの選択値により、ListView内のレイアウト・データをごっそり入れ替えるように実装して、所望の形になりました。 positionではなく、ラジオボタンの選択値により、getView内で分岐させるという方法になりましたが、ご回答を元にそのようにいたしました。どうもありがとうございました。 ちゃんとconvertViewで再利用もしております(^^;
guest

0

ベストアンサー

今考えていらっしゃる、アダプターのgetView()内でposition>0の時、何らかの状態変数で表示するView(レイアウト)を切り替える、で十分だと思います。
強引でもなんでもありません。

投稿2015/06/26 06:20

terushu

総合スコア358

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問