简体   繁体   中英

Android RecyclerView doesn't show items

Please, help to figure out why my implementation of RecyclerView doesn't show anything.

Retrieving data asynchronously and result is successfull, but don't know how to display it correctly.

Activity

public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        checkAndRequestPermissions(Manifest.permission.INTERNET);

        RecyclerView recyclerView = binding.recyclerView;
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(linearLayoutManager);

        NewsAdapter adapter = new NewsAdapter();
        recyclerView.setAdapter(adapter);

        RssService.runRssFeed(newsList -> {
            System.out.println("SIZE ----- " + newsList.size());
            adapter.setItems(newsList);
        });

    }
}

Adapter

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

    private final List<NewsModel> news = new ArrayList<>();

    @Override
    public NewsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.news_item, parent, false);
        return new ViewHolder(view);
    }

    public void setItems(List<NewsModel> news) {
        this.news.addAll(news);
        notifyDataSetChanged();
    }

    public void clearItems() {
        this.news.clear();
        notifyDataSetChanged();
    }

    @Override
    public void onBindViewHolder(@NonNull NewsAdapter.ViewHolder holder, int position) {

        holder.title.setText(news.get(holder.getAdapterPosition()).getTitle());
        holder.date.setText(news.get(holder.getAdapterPosition()).getDate());
        holder.link.setText(news.get(holder.getAdapterPosition()).getLink());

    }

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

    public static class ViewHolder extends RecyclerView.ViewHolder {

        final TextView title, date, link;

        public ViewHolder(View view) {
            super(view);

            title = view.findViewById(R.id.titleTxt);
            date = view.findViewById(R.id.dateTxt);
            link = view.findViewById(R.id.linkTxt);
        }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:nestedScrollingEnabled="false"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>

</LinearLayout>

news_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:orientation="vertical">

        <TextView
            android:id="@+id/titleTxt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/white"
            android:textSize="16sp"
            android:textStyle="normal"
            android:typeface="sans" />

        <TextView
            android:id="@+id/linkTxt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:textColor="@color/white"
            android:textSize="12sp"
            android:textStyle="normal"
            android:typeface="sans" />

        <TextView
            android:id="@+id/dateTxt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:layout_marginTop="10dp"
            android:textColor="@color/white"
            android:textSize="12sp"
            android:textStyle="normal"
            android:typeface="sans" />


</LinearLayout>

I think It showed correctly but you can't see because your text color is white

**issue in these lines** 


 holder.title.setText(news.get(holder.getAdapterPosition()).getTitle());
        holder.date.setText(news.get(holder.getAdapterPosition()).getDate());
        holder.link.setText(news.get(holder.getAdapterPosition()).getLink());

change these like

 holder.title.setText(news.get(position).getTitle());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM