RecyclerView工作不正常:适配器未连接



我的adapater类有问题。我试了很多次想弄清楚为什么适配器没有连接到回收器上。一直跳过布局,请帮助: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();
}
});
}}

在onCreate((中设置Adapter以循环查看,然后设置

例如:adapter = new Adapter(MainActivity.this, articles); recyclerView.setAdapter(adapter);

在onResponse中,将文章的最新数据更新到适配器,并在适配器上调用notifyDataSetChanged((

例如:

public setData(List<Articles> articles){
this.articles = articles
notifyDataSetChanged}
}

看起来编码没有问题,只是通知适配器adapter.notifyDatasetChanged((。还要检查是否为视图传递了正确的ID(致命错误(。

最新更新