要从RecyclerView中使用NewsAPI加载URL,你需要遵循以下步骤:
public class NewsArticle {
private String title;
private String description;
private String url;
// 构造函数、getter和setter方法
}
<!-- activity_main.xml -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsViewHolder> {
private List<NewsArticle> articles;
public NewsAdapter(List<NewsArticle> articles) {
this.articles = articles;
}
@NonNull
@Override
public NewsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_news, parent, false);
return new NewsViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull NewsViewHolder holder, int position) {
NewsArticle article = articles.get(position);
holder.title.setText(article.getTitle());
holder.description.setText(article.getDescription());
holder.itemView.setOnClickListener(v -> {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(article.getUrl()));
v.getContext().startActivity(intent);
});
}
@Override
public int getItemCount() {
return articles.size();
}
static class NewsViewHolder extends RecyclerView.ViewHolder {
TextView title, description;
NewsViewHolder(View itemView) {
super(itemView);
title = itemView.findViewById(R.id.news_title);
description = itemView.findViewById(R.id.news_description);
}
}
}
public interface NewsService {
@GET("top-headlines")
Call<List<NewsArticle>> getTopHeadlines(@Query("apiKey") String apiKey);
}
// 在Activity或Fragment中使用
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://newsapi.org/v2/")
.addConverterFactory(GsonConverterFactory.create())
.build();
NewsService service = retrofit.create(NewsService.class);
Call<List<NewsArticle>> call = service.getTopHeadlines("YOUR_API_KEY");
call.enqueue(new Callback<List<NewsArticle>>() {
@Override
public void onResponse(Call<List<NewsArticle>> call, Response<List<NewsArticle>> response) {
if (response.isSuccessful()) {
List<NewsArticle> articles = response.body();
NewsAdapter adapter = new NewsAdapter(articles);
recyclerView.setAdapter(adapter);
}
}
@Override
public void onFailure(Call<List<NewsArticle>> call, Throwable t) {
// 处理错误情况
}
});
以上是从RecyclerView中使用NewsAPI加载URL的基本步骤和注意事项。希望这对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云