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

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

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

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1358閲覧

コード上から特定のリストだけ色を変更したい

koala2

総合スコア24

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2019/08/05 09:54

ListViewを用いてデータ配列からリストを作成しました。
この時、特定の行だけ背景色を変更したいときに、Adapterに通した後のリストに対して、特定行だけ背景色を変更することは可能でしょうか?
特定の行の背景色を指定した後にAdapterに通すことで実現することはできましたが、一度Adaputerに通した後ではその後は設定変更は不可能なのでしょうか?
お詳しい方、ご教授お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

特定の行だけ背景色を変更したいときに、Adapterに通した後のリストに対して、特定行だけ背景色を変更することは可能でしょうか?

可能です.

特定の行の背景色を指定した後にAdapterに通すことで実現することはできましたが、一度Adaputerに通した後ではその後は設定変更は不可能なのでしょうか?

可能です.

「adapter に通す」という独特な表現を, 単に「アダプタにデータを渡す」というつもりで回答致しました.

ListView の各行の描画は, システムが判断したタイミングによって Adapter の getView メソッド呼ばれ, 返した View を表示することで行われています.
ですので, getView が返す View の背景色を必要に応じて変えることで行毎に背景色を変えられます.

ただし, getView が呼ばれる(=行が(再)表示される)のは「システムが判断したタイミング」です.
(再)表示が必要と判断されるためには, そのヒントを伝えなければなりません. それが例えば notifyDataSetChanged(); です.
「Adapter の持っているデータが変更された」ことを ListView に通知するメソッドですが, 例え本当に表示しているデータそのものが更新されていなくても構いません. とにかくこのメソッドを呼ぶと『データが変更された=再表示する必要がある』ということになり, 必要な処理( getView() の呼び出しとその View の表示)が行われることになります.

投稿2019/08/06 12:40

jimbe

総合スコア12648

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

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

koala2

2019/08/08 08:31

Adapterに関する理解が少し間違っていたようです。 上記のご説明を踏まえて、背景色変更のタイミングで再度Adapterにデータを渡すことで 思いどおりの実装を行うことができました。 ありがとうございます。
jimbe

2019/08/08 08:50

Adapter にデータを設定し直すと, 内部で notifyDataSetChanged が呼ばれます. ただ, データが変わらないのに再設定するのは若干無駄があります. Adapter が自作でしたら, 例えば行毎の背景色を(表示するデータと別に) Adapter 内に保持しておき getView でそこから背景色を設定するようにして, それに設定するメソッドを作って設定と同時に notifyDataSetChanged を呼ぶようにしておくと, 任意のタイミングで(データを再設定することなく)背景色を変えられるようにできます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問