2016-04-12 25 views
56

私は、recyclerviewが1つのアイテムしか表示していないという奇妙なエラーに直面しています。以下は、私のrecyclerviewアダプタのコードです:リサイクルビューで単一のアイテムが表示されています

public class ChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 


List<chat> chats; 
String username; 
final int My=0,Their=1; 

public ChatAdapter(List<chat> chats) { 
    this.chats = chats; 
    this.username = PushApp.getApp().getSPF().getStringData(Constants.ANAME); 
} 


@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    RecyclerView.ViewHolder viewHolder; 
    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 

    switch (viewType) { 
     case My: 
      View v1 = inflater.inflate(R.layout.my_chat_child, parent, false); 
      viewHolder = new MyChatHolder(v1); 
      break; 
     case Their: 
      View v2 = inflater.inflate(R.layout.their_chat_child, parent, false); 
      viewHolder = new TheirMessageHolder(v2); 
      break; 
     default: 
      View v = inflater.inflate(R.layout.my_chat_child, parent, false); 
      viewHolder = new MyChatHolder(v); 
      break; 
    } 

    return viewHolder; 

} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    switch (holder.getItemViewType()) { 
     case My: 
      MyChatHolder myChatHolder = (MyChatHolder) holder; 
      myChatHolder.setMyMessage(chats.get(position).getMessage()); 
      break; 

     case Their: 
      TheirMessageHolder theirMessageHolder = (TheirMessageHolder) holder; 
      theirMessageHolder.setTheirChat(chats.get(position).getFrom(), chats.get(position).getMessage()); 
      break; 
    } 
} 

@Override 
public int getItemViewType(int position) { 
    if(username.equalsIgnoreCase(chats.get(position).getFrom())) 
     return My; 
    return Their; 
} 

@Override 
public int getItemCount() { 
    return chats.size(); 
}} 

私はすでにこのコードを他のアプリケーションで使用していますが、そのコードは完全に動作しています。私も完璧なチャットデータをチェックしました。 layout files

+0

あなたのXMLコード – OShiffer

+0

@OShiffer私は – Rujul1993

+3

ではなく、あなたのレイアウトで高さと幅のためmatch_parent' 'のwrap_content''設定にしてくださいgitのレポのリンクを追加した追加します。https:// githubの.com/revic1993/androidchat/blob/master/app/src/main/res/layout/my_chat_child.xml#L4 https://github.com/revic1993/androidchat/blob/master/app/src/main/res/レイアウト/ their_chat_child.xml#L4 – Slavik

答えて

220

アイテムビューの高さmatch_parentを使用しないでください:

ここでGitのレポレイアウトファイルへのリンクがあります。 1つの項目が画面全体を縦に塗りつぶすので、別の項目は表示されません。

+22

Google Lintの警告を追加してください。今度はあなたの厄介な糸くずを便利にしてください! –

+1

ああありがとう、恐ろしい男、私の場合、私は高さとしてmatch_parentの項目を作成しました。したがって、すべての画面は最初の項目の後ろに保管されていました。 –

+5

私はあなたにcofeeを買いましょう!あなたはちょうど私の正気を救った!ありがとう! – microwth

6

あなたはこれらの事従うべきrecyclerviewためrow.xmlを作成しているとき:

  1. 常にそうでない場合は、「match_parent」の行の高さのために、「Wrap_content」を使用するには、単一の行のために画面全体を占有します。

  2. また、dpで高さを取ることもできます。あなたrecyclerviewが水平である場合、あなたのrecyclerviewはrecyclerview match_parentともrow_item.xmlmatch_parent

    2)の垂直次に設定高さである場合

+0

私は同じ問題をスクロールして、アイテムの残りの部分を見た –

+1

あなたの2番目のポイントは私を助けました:) –

+0

ありがとう@AdarshGumashta –

-1

1)をrecyclerview match_parentともrow_item.xmlmatch_parent

の幅を設定しました

例: - 水平リサイクビュー

<android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="60dp" 
     android:layout_marginRight="60dp" /> 

row_item.xml

<TextView 
android:layout_width="match_parent" 
android:layout_height="180dp" 
android:layout_marginBottom="5dp" 
android:layout_marginLeft="10dp" 
android:layout_marginRight="10dp" 
android:layout_marginTop="5dp" 
android:background="@drawable/rect" 
android:gravity="center" 
android:maxLines="2" 
android:padding="10dp" 
android:textColor="@color/white" 
android:textSize="25sp" /> 
関連する問題