একক আইটেম দেখাচ্ছে রিসাইক্লার ভিউ


124

আমি একটি অদ্ভুত ত্রুটির মুখোমুখি হয়েছি যেখানে রিসাইক্লারভিউটি কেবল একটি আইটেম দেখায়। নীচে আমার পুনর্ব্যবহারযোগ্য অ্যাডাপ্টারের কোড রয়েছে:

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();
}}

আমি ইতিমধ্যে এই কোডটি অন্য অ্যাপ্লিকেশন এবং এটির পুরোপুরি কার্যকরভাবে ব্যবহার করেছি। আমি চ্যাটগুলির ডেটা যাচাই করেছিলাম যা সঠিক।

এখানে গিট রেপো লেআউট ফাইলগুলির লিঙ্ক: লেআউট ফাইল


@ ইউসিফার আমি গিট রেপো লিঙ্কটি যুক্ত করেছি
রুজুল 1993

4
Github.com/revic1993/androidchat/blob/master/app/src/main/res/… github.com/revic1993/androidchat/blob/master/app/src/main এ আপনার লেআউটে উচ্চতা এবং প্রস্থের wrap_contentপরিবর্তে সেট করার চেষ্টা করুন / রেজ / ...match_parent
স্লাভিক

@ স্লাভিক ধন্যবাদ এটি কাজ করেছে!
রুজুল 1993

উত্তর:


419

match_parentআপনার আইটেম দর্শন জন্য উচ্চতার জন্য ব্যবহার করবেন না । একটি আইটেম পুরো পর্দা উল্লম্বভাবে পূরণ করে যাতে আপনি অন্যটি দেখতে পান না।


43
গুগল দয়া করে কিছু লিন্টের সতর্কতা যুক্ত করুন, আপনার বিরক্তিকর লিঙ্ককে এবার কার্যকর করুন!
নিওন ওয়ার্জ

1
ওহ ধন্যবাদ, অসাধারণ মানুষ, আমার ক্ষেত্রে আমি ম্যাচ_পিতা সাথে উচ্চতা হিসাবে আইটেম তৈরি করেছি। সুতরাং সমস্ত পর্দা প্রথম আইটেম পিছনে রাখা হয়েছিল।
নাভিদ আহমেদ

7
আমাকে আপনার একটি কফি কিনতে দিন! আপনি কেবল আমার বিচক্ষণতা বাঁচিয়েছেন! ধন্যবাদ!
মাইক্রোথ

আমার জন্য কাজ করে না। সকল আইটেম শুধুমাত্র দেখানো হয় যদি Buttonপূর্বে স্থাপন RecyclerView। কোনও পরামর্শ?
কনস্ট্যান্টিন কনোপকো 15:25


17

আপনি যখন রিসাইক্লারভিউয়ের জন্য সারি.এক্সএমএল তৈরি করছেন তখন এই জিনিসগুলি অনুসরণ করা উচিত:

  1. সারির উচ্চতার জন্য সর্বদা "মোড়ানো_ কনটেন্ট" ব্যবহার করুন অন্যথায় "ম্যাচ_প্যারেন্ট" এ এটি একটি একক সারির জন্য পুরো পর্দা দখল করবে।

  2. আপনি উচ্চ ডিপিও নিতে পারেন।


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) আপনার recyclerview অনুভূমিক তারপর recyclerview প্রস্থ সেট করা হয় যদি match_parentএবং row_item.xmlপ্রস্থ এছাড়াওmatch_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" />

0

কন্টেন্ট_মেন.এক্সএমএল নীচে

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

ইন রো_লিস্ট.এক্সএমএল ফাইল নিম্নলিখিত পরিবর্তনগুলি করে

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

আমি উপরের পরিবর্তনগুলি এটি চালায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.