gpt4 book ai didi

java - 如何从 recyclerview newsapi 加载 url

转载 作者:行者123 更新时间:2023-12-02 00:58:17 24 4
gpt4 key购买 nike

我正在开发一个使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com