0

で私は、メッセージングアプリケーションに取り組んでいますし、メッセージの所有者が誰であるかに応じて、左または右から来たものとしてチャットバブルを設定したいリスト項目の表示やデータへのアクセス。 MessageAdapterインサイドは同時に

public class Message { 
    public String messageText; 
    public boolean mine; 

    // ...Constructor 
} 

私が持っている:私はRecyclerViewにListViewコントロールから移行するチュートリアルを、以下のと同時に、項目のデータとそのビューの両方にアクセスする方法に関して、今は不明だされている

@Override 
public MessageHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View view = LayoutInflater.from(parent.getContext()).inflate(this.itemResource, parent, false); 
    return new MessageHolder(this.context, view); 
} 

@Override 
public void onBindViewHolder(MessageHolder holder, int position) { 

    Message message = this.messages.get(position); 
    holder.bindMessage(message); 
} 

NullPointerExceptionを取得することなく。私が使用するコードは次のようになります。私はonCreateViewHolderに入れた場合

Drawable background = getResources().getDrawable(message.mine ? R.drawable.bubble_right : R.drawable.bubble_left); 
background.setColorFilter(getResources().getColor(R.color.ColorPrimary), PorterDuff.Mode.SRC_IN); 

view.findViewById(R.id.message_text).setBackgroundDrawable(background); 

しかし、私は所有権を確認する個々のメッセージにアクセスする方法を見つけ出すことはできません。私がonBindViewHolderに入れた場合、私はmessageですが、その見解を得ることはできません。これをどうすれば解決できますか?

答えて

0

リストビューからRecyclerViewに移動している場合、それは理解することは非常に簡単です。

getView() (of ListView) == onCreateViewHolder() + onBindViewHolder(); 

あなたは私たちがgetViewメソッドによって与えられたビューをチェックする必要が覚えている場合は、NULLかどうかであり、それがnullだならば、我々はそうでない場合は、対応するビューにデータを設定するインスタンス化の世話をする必要があります。 RecyclerViewは私たちの生活を楽にしています。onCreateViewは各行のビューの新しいインスタンスを作成します(最低限必要)。onBindViewHolderは各ビュー要素にデータをバインドします。

私がなぜ、どのようにRecyclerViewのこれら2つのメソッドを処理するために、今、あなたは明らかだと思います。 コードごとに、view.findViewById(R.id.message_text)行をViewHolderクラスに移動する必要があります。 そして、次の行が

Drawable background = getResources().getDrawable(message.mine ? R.drawable.bubble_right : R.drawable.bubble_left); 
background.setColorFilter(getResources().getColor(R.color.ColorPrimary), PorterDuff.Mode.SRC_IN); 
holder.your_view.setBackgroundDrawable(background); 

は、あなたがさらに明確化をお知りになりたい場合は、私に教えてくださいonBindViewHolder

に行きます。

+0

私は 'onCreateViewHolder'と' onBindViewHolder'が一緒に 'getView'を構成していることを理解しています。しかし、私はこの知識を自分の状況に適用する方法が不明です。あなたは私の質問に を見ることができるように、私は 'message.mine'が真と評価するか否かに応じて、' bubble_left'または 'bubble_right'のいずれかに' TextView'の背景を設定したいと思います。私は 'message'とそのビュー(バックグラウンドを設定する)の両方に同時にアクセスする方法を知らない。 – HEATH3N

+0

私の答えを更新しました。 – Neo