简体   繁体   English

Android RecyclerView 不显示项目

[英]Android RecyclerView doesn't show items

Please, help to figure out why my implementation of RecyclerView doesn't show anything.请帮忙弄清楚为什么我的RecyclerView实现没有显示任何内容。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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