RecyclerView 无法正常工作:适配器未连接
Posted
技术标签:
【中文标题】RecyclerView 无法正常工作:适配器未连接【英文标题】:RecyclerView not working properly: adapter isnt attaching 【发布时间】:2020-12-31 08:47:17 【问题描述】:我的适配器类有问题。我已经尝试了很多次来弄清楚为什么适配器没有连接到回收器。不断跳过布局请帮助:S。我不知道任何有使用 Recyclers 的程序员。我不确定我在哪里搞砸了。也没有任何代码行显示任何错误。但我有两种方法是灰色的。
适配器类
public Adapter(Context context,List<Articles> articles)
this.context = context;
this.articles = articles;
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_layout, parent,false);
return new ViewHolder(view);
`
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position)
final Articles a=articles.get(position);
String url = a.getUrl();
holder.tvTitle.setText(a.getTitle());
holder.tvSource.setText(a.getSource().getName());
holder.tvDate.setText(a.getPublishedAt());
String imageUrl=a.getUrlToImage();
Picasso.get().load(imageUrl).into(holder.imageView);
holder.cardView.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent intent=new Intent(context, NewsInDetails.class);
intent.putExtra("url",a.getUrl());
context.startActivity(intent);
);
@Override
public int getItemCount()
return articles.size();
public class ViewHolder extends RecyclerView.ViewHolder
TextView tvTitle,tvSource,tvDate;
ImageView imageView;
CardView cardView;
public ViewHolder(@NonNull View itemView)
super(itemView);
tvTitle=itemView.findViewById(R.id.tvId);
tvDate=itemView.findViewById(R.id.tvDate);
tvSource=itemView.findViewById(R.id.tvSource);
imageView=itemView.findViewById(R.id.image);
cardView=itemView.findViewById(R.id.cardView);
public String getCountry()
Locale locale=Locale.getDefault();
String country=locale.getCountry();
return country.toLowerCase();
主类
public class MainActivity extends AppCompatActivity
RecyclerView recyclerView;
Adapter adapter;
final String apiKey = "732e904090094f96be1cd5f012f107a3";
Button button;
ImageButton floatingActionButton;
List<Articles> articles =new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView =findViewById(R.id.recyclerView);
button=findViewById(R.id.refreshButton);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
final String country=getCountry();
floatingActionButton=(ImageButton)findViewById(R.id.floating);
floatingActionButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent intent=new Intent(MainActivity.this,Intro.class);
startActivity(intent);
);
retrieveGSON(country,apiKey);
button.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
retrieveGSON(country,apiKey);
);
public void retrieveGSON(String country, String apiKey)
Call<Headlines> call= Client.getInstance().getApi().getHeadlines(country, apiKey);
call.enqueue(new Callback<Headlines>()
@Override
public void onResponse(Call<Headlines> call, Response<Headlines> response)
if (response.isSuccessful() && response.body().getArticles()!=null)
articles.clear();
articles = response.body().getArticles();
adapter = new Adapter(MainActivity.this, articles);
recyclerView.setAdapter(adapter);
@Override
public void onFailure(Call<Headlines> call, Throwable t)
Toast.makeText(MainActivity.this,"There is An Error",Toast.LENGTH_SHORT).show();
);
【问题讨论】:
如果它们显示为灰色,则表示它们没有在任何地方使用 【参考方案1】:然后在 onCreate() 中将 Adapter 设置为 recyclerview
例如:
adapter = new Adapter(MainActivity.this, articles); recyclerView.setAdapter(adapter);
在onResponse中将文章最新数据更新到适配器并在适配器上调用notifyDataSetChanged()
例如:
public setData(List<Articles> articles)
this.articles = articles
notifyDataSetChanged
【讨论】:
嘿,感谢您的帮助!不幸的是,这对我不起作用。我的应用程序变为空白:s 您是否在 onResponse 中获取文章的成功响应数据,请查看日志。 [FATAL:jni_android.cc(243)] 是logcat中的错误【参考方案2】:看起来编码没有问题,但只是通知适配器 适配器.notifyDatasetChanged()。 还要检查您是否为视图传递了正确的 ID(致命错误)。
【讨论】:
以上是关于RecyclerView 无法正常工作:适配器未连接的主要内容,如果未能解决你的问题,请参考以下文章
Fragment,RecyclerView:没有附加适配器;跳过布局
单击项目时,Recyclerview onbindview 无法正常工作