- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个使用 fragment 的新闻阅读器应用程序。我从 newsapi 获取数据。到目前为止,我已经设法从 api 中提取数据并将其显示在 recyclerview 中,但是当我单击某个项目时,没有任何反应!
public class HomeFragment extends Fragment implements RecyclerViewAdapter.OnItemClickListener {
public static final String API_KEY= "c03ceb6a99b14050875f56xxxxxxxx";
private RecyclerView recyclerView;
private List<Article> articles = new ArrayList<>();
private RecyclerViewAdapter recyclerViewAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home,container,false);
recyclerView = rootView.findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerViewAdapter = new RecyclerViewAdapter(articles,getActivity());
recyclerViewAdapter.setOnItemClickListener(HomeFragment.this);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setNestedScrollingEnabled(false);
LoadJsonData();
return rootView;
}
public void LoadJsonData(){
ApiInterface apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
String country = Utils.getCountry();
Call <News> call;
call = apiInterface.getNews(country,API_KEY);
call.enqueue(new Callback<News>() {
@Override
public void onResponse(Call<News> call, Response<News> response) {
if (response.isSuccessful() && response.body().getArticle() != null){
if (!articles.isEmpty()){
articles.clear();
}
articles = response.body().getArticle();
recyclerViewAdapter = new RecyclerViewAdapter(articles,getActivity());
recyclerView.setAdapter(recyclerViewAdapter);
recyclerViewAdapter.setOnItemClickListener(HomeFragment.this);
recyclerViewAdapter.notifyDataSetChanged();
} else {
Toast.makeText(getActivity(),"No result",Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<News> call, Throwable t) {
}
});
}
@Override
public void onItemClick(int position) {
articles.get(position);
}
}
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private List<Article> articles;
private Context context;
private OnItemClickListener onItemClickListener;
public interface OnItemClickListener {
void onItemClick(int position);
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public RecyclerViewAdapter(List<Article> articles, Context context) {
this.articles = articles;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate((R.layout.card_view_layout), viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
final ViewHolder holder = viewHolder;
Article model = articles.get(i);
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(Utils.getRandomDrawbleColor());
requestOptions.error(Utils.getRandomDrawbleColor());
requestOptions.diskCacheStrategy(DiskCacheStrategy.ALL);
requestOptions.centerCrop();
Glide.with(context)
.load(model.getUrlToImage())
.apply(requestOptions)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
holder.progressBar.setVisibility(View.GONE);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
holder.progressBar.setVisibility(View.GONE);
return false;
}
})
.transition(DrawableTransitionOptions.withCrossFade())
.into(holder.imageView);
holder.title.setText(model.getTitle());
holder.desc.setText(model.getDescription());
holder.source.setText(model.getSource().getName());
holder.time.setText(" \u2022 " + Utils.DateToTimeFormat(model.getPublishedAt()));
}
@Override
public int getItemCount() {
return articles.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView title, desc, source, time;
ImageView imageView;
ProgressBar progressBar;
public ViewHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.title);
desc = itemView.findViewById(R.id.description);
source = itemView.findViewById(R.id.source);
time = itemView.findViewById(R.id.time);
imageView = itemView.findViewById(R.id.headline_image);
progressBar = itemView.findViewById(R.id.progress_load);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (onItemClickListener != null){
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION){
onItemClickListener.onItemClick(position);
}
}
}
});
}
}
}
最佳答案
看来您在 onClick 中所做的就是获取项目位置。现在你可以用这个职位做一些事情了。
所以问题归结为,你想做什么?
启动详细信息 Activity/fragment 以显示更多信息?这是移动设备的典型模式。
Intent i = new Intent(context,DetailActivity.class);
i.putExtra(Your Data);
startActivity(i);
关于java - 如何从 recyclerview newsapi 加载 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57791736/
我想建立一个网站并插入新闻文章。我找到了一个免费的 newsAPI 网站,我得到了如下的 apikey: https://newsapi.org/v1/articles?source=techcrun
我正在开发一个使用 fragment 的新闻阅读器应用程序。我从 newsapi 获取数据。到目前为止,我已经设法从 api 中提取数据并将其显示在 recyclerview 中,但是当我单击某个项目
我正在开发一个 react 原生项目,我必须在其中显示实时新闻。为了从新闻资源中获取数据,我使用 newsAPI,它为我提供了一个 JSON 对象作为响应。示例响应类似于 this根据 newsapi
编辑:对于任何遇到相同问题的人来说,事实证明 top_headlines 不支持多个关键字,这是一个无赖。这是带有“所有内容”而不是“头条新闻”的多个关键字的工作代码。 keywords = ["wa
这个问题在这里已经有了答案: No 'Access-Control-Allow-Origin' header is present on the requested resource—when tr
这个问题在这里已经有了答案: No 'Access-Control-Allow-Origin' header is present on the requested resource—when tr
我正在使用 News API在安卓应用中。 我正在尝试从服务器获取更多结果(新闻),但它始终只返回 20 个结果,这些结果已设置为默认值,如文档 here 中所述. 这是我的代码: class Dow
当我在本地主机上尝试我的项目时,它运行良好,使用 https://cors-anywhere.herokuapp.com/因为我遇到了 CORS 问题。但是一旦我在 Netlify 上部署了该站点,无
我正在尝试使用 nextjs/react 访问 newsapi,但出现“类型错误:data.map 不是函数”。 我尝试了 stackoverflow 上提供的以下一些解决方案,但对我的情况不起作用。
我是一名优秀的程序员,十分优秀!