एकल आइटम दिखाते हुए रिसाइकलर दृश्य


124

मैं एक अजीब त्रुटि का सामना कर रहा हूं जहां recyclerview केवल एक आइटम दिखा रहा है। नीचे मेरे 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();
}}

मैंने पहले से ही इस कोड को अन्य ऐप और इसके पूरी तरह से काम करने में उपयोग किया है। मैंने चैट डेटा की जाँच की है, जो सही भी है।

यहाँ git रेपो लेआउट फ़ाइलों के लिए लिंक है: लेआउट फाइलें


@ स्थिति मैं git रेपो लिंक जोड़ दिया है
रुजुल

4
स्थापित करने के लिए प्रयास करें wrap_contentके बजाय match_parentअपने लेआउट में ऊंचाई और चौड़ाई के लिए github.com/revic1993/androidchat/blob/master/app/src/main/res/... github.com/revic1993/androidchat/blob/master/app/src/main / रेस /…
स्लाविक

@Slavik धन्यवाद यह काम किया!
रूजुल

जवाबों:


419

match_parentअपने आइटम दृश्य के लिए ऊँचाई का उपयोग न करें । एक आइटम पूरी स्क्रीन को लंबवत भरता है ताकि आप दूसरा न देखें।


43
Google कृपया कुछ लिंट चेतावनी दें, इस बार अपने कष्टप्रद लिंट को उपयोगी बनाएं!
नियॉन वेज

1
ओह धन्यवाद, बहुत बढ़िया आदमी, मेरे मामले में मैंने ऊंचाई के रूप में मैच_परेंट के साथ आइटम बनाया। इसलिए सभी स्क्रीन को पहले आइटम के पीछे रखा गया था।
नावेद अहमद

7
मुझे तुम्हें एक कॉफ़ी खरीदने दो! तुमने अभी मेरी पवित्रता को बचाया है! धन्यवाद
microwth

मेरे लिए काम नहीं करता है। सभी आइटम केवल तभी दिखाए जाते हैं यदि Buttonपहले रखा गया हो RecyclerView। कोई सुझाव?
कोनस्टेंटिन कोनपोको


17

जब आप recyclerview के लिए row.xml बना रहे हैं तो इन बातों का पालन करना चाहिए:

  1. पंक्ति की ऊंचाई के लिए हमेशा "wra_content" का उपयोग करें अन्यथा "match_parent" में यह एकल पंक्ति के लिए पूरी स्क्रीन पर कब्जा कर लेगा।

  2. आप dp में ऊंचाई भी ले सकते हैं।


1
मैं एक ही मुद्दा स्क्रॉल करने की कोशिश की थी और बाकी वस्तुओं को देखा
निक्सन कोसेगी

1

अपने आइटम दृश्य में उपयोग किए गए लेआउट को बदलने का प्रयास करें FrameLayout। यहाँ एक उदाहरण है।

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item"
    android:layout_width="match_parent"
    android:layout_height="?listPreferredItemHeight"
    android:clickable="true"
    android:focusable="true"
    android:foreground="?selectableItemBackground">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"/>
</FrameLayout>

1

मेरी गलती थी मैं अचानक इस्तेमाल किया गया था:

LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)

के बजाय:

LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)

0

1) यदि आपका रिसाइक्लेरव्यू वर्टिकल है तो रिसाइक्लेव्यू की ऊंचाई match_parentऔर row_item.xmlऊंचाई भी सेट करेंmatch_parent

2) यदि आपका रिसाइक्लेव्यू क्षैतिज है, तो चौड़ाई का पुनरावर्तन match_parentऔर row_item.xmlचौड़ाई भी निर्धारित करेंmatch_parent

पूर्व के लिए: - क्षैतिज RecyclerView

<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" />

0

content_main.xml इस प्रकार है

android:layout_width="match_parent"
android:layout_height="match_parent"

Row_list.xml फ़ाइल निम्नलिखित परिवर्तन करती है

android:layout_width="match_parent"
android:layout_height="wrap_content"

मैं उपरोक्त बदलाव करता हूं जो इसे चलाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.