java - 如何使 Recyclerview 适配器标题中的文本可点击
问题描述
我对 Java 还是很陌生,但我正在学习至少对现有代码进行更改。
我拥有的是其他人开发的应用程序,我只是对其进行了一些小改动。我正在尝试设置Textview
“最近添加”,以便可以单击它并将其更改为“按日期”并再次返回,然后我将根据该更改 API。如果我能得到帮助,知道把它放在哪里,onClickListener
我想我能得到它....
如果有人可以帮助我,我将不胜感激。这是 PreachingAdapter.java 的代码
package com.churchofgod.adapter;
public class PreachingAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
public List<LandingData.SermonsData> items;
public Listpackage<LandingData.PodcastsData> items1;
public List<LandingData.SingingsData> items2;
public List<LandingData.SundaySchoolsData> items3;
Context context;
int headerType;
private static final int HEADER_VIEW = 1;
public static class PreachingHeaderViewHolder extends RecyclerView.ViewHolder {
FrameLayout viewApostlesLayout, viewOrdainedMinistersLayout, viewLocationsLayout;
PreachingHeaderViewHolder(View itemView) {
super(itemView);
viewApostlesLayout = itemView.findViewById(R.id.viewApostlesLayout);
viewOrdainedMinistersLayout = itemView.findViewById(R.id.viewOrdainedMinistersLayout);
//viewMinistersLayout = (FrameLayout) itemView.findViewById(R.id.viewMinistersLayout);
viewLocationsLayout = itemView.findViewById(R.id.viewLocationsLayout);
}
}
public static class SundaySchoolsHeaderViewHolder extends RecyclerView.ViewHolder {
FrameLayout viewApostlesLayout, viewOrdainedMinistersLayout, viewLocationsLayout;
SundaySchoolsHeaderViewHolder(View itemView) {
super(itemView);
viewApostlesLayout = itemView.findViewById(R.id.viewApostlesLayout);
viewOrdainedMinistersLayout = itemView.findViewById(R.id.viewOrdainedMinistersLayout);
//viewMinistersLayout = (FrameLayout) itemView.findViewById(R.id.viewMinistersLayout);
viewLocationsLayout = itemView.findViewById(R.id.viewLocationsLayout);
}
}
public static class SingingHeaderViewHolder extends RecyclerView.ViewHolder {
FrameLayout viewLocationsLayout;
SingingHeaderViewHolder(View itemView) {
super(itemView);
viewLocationsLayout = itemView.findViewById(R.id.viewLocationsLayout);
}
}
public static class ItemViewHolder extends RecyclerView.ViewHolder {
CardView cardView;
ImageView img;
TextView tvTitle;
TextView tvDesc;
ItemViewHolder(View itemView) {
super(itemView);
cardView = itemView.findViewById(R.id.cardView);
img = itemView.findViewById(R.id.img);
tvTitle = itemView.findViewById(R.id.tvTitle);
tvDesc = itemView.findViewById(R.id.tvDesc);
}
}
public PreachingAdapter(List<LandingData.SermonsData> items, Context context, int headerType){
this.items = items;
this.context = context;
this.headerType = headerType;
}
@Override
public int getItemCount() {
if (headerType == 0) {
return items1.size();
} else if (headerType == 1 ){
if (items.size() == 0) {
return 1;
} else {
return items.size() + 1;
}
}
else if (headerType == 3)
{
return items.size();
}
else if (headerType == 4)
{
return items3.size();
}
else {
return items2.size() + 1;
}
}
@Override
public int getItemViewType(int position) {
if (headerType == 0) {
return super.getItemViewType(position);
} else if (headerType == 3)
{
return items.size();
} else if (headerType == 4)
{
return items3.size();
}
else {
if (position == 0) {
return HEADER_VIEW;
} else {
return super.getItemViewType(position);
}
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
if (viewType == HEADER_VIEW) {
if (headerType == 1) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.adapter_all_preaching_header, viewGroup, false);
PreachingAdapter.PreachingHeaderViewHolder preachingHeaderViewHolder = new PreachingAdapter.PreachingHeaderViewHolder(view);
return preachingHeaderViewHolder;
}else if (headerType == 4) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.adapter_all_teaching_header, viewGroup, false);
PreachingAdapter.SundaySchoolsHeaderViewHolder sundaySchoolsHeaderViewHolder = new PreachingAdapter.SundaySchoolsHeaderViewHolder(view);
return sundaySchoolsHeaderViewHolder;
} else {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.adapter_all_singing_header, viewGroup, false);
PreachingAdapter.SingingHeaderViewHolder singingHeaderViewHolder = new PreachingAdapter.SingingHeaderViewHolder(view);
return singingHeaderViewHolder;
}
} else {
Viepackagew view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.adapter_preaching, viewGroup, false);
PreachingAdapter.ItemViewHolder itemViewHolder = new PreachingAdapter.ItemViewHolder(view);
return itemViewHolder;
}
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int i) {
try {
if (viewHolder instanceof ItemViewHolder) {
PreachingAdapter.ItemViewHolder itemViewHolder = (PreachingAdapter.ItemViewHolder) viewHolder;
String imgUrl = "" ,title = "" ,desc = "";
if (headerType == 1 || headerType == 3) //||headerType == 4)//sermons
{
LandingData.SermonsData data = items.get(headerType==3?i:i-1);
imgUrl = data.artists.get(0).image;
title = data.title;
if (data.artists.size() >= 2){
String firstMinister = data.artists.get(0).name;
String secondMinister = data.artists.get(1).name;
packagepackage desc = firstMinister + " & " + secondMinister;
}else{
desc = data.artists.get(0).name;
}
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, NowPlayingActivity.class);
CurrentPlaying.stopSimpleExoPlayer();
intent.putExtra("data",items.get(headerType==3?i:i-1));
context.startActivity(intent);
}
});
}
else if (headerType == 4)
{
LandingData.SundaySchoolsData data = items3.get(headerType==4?i:i-1);
imgUrl = data.artists.get(0).image;
title = data.title;
if (data.artists.size() >= 2){
String firstMinister = data.artists.get(0).name;
String secondMinister = data.artists.get(1).name;
desc = firstMinister + " & " + secondMinister;
}else{
desc = data.artists.get(0).name;
}
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, NowPlayingActivity.class);
CurrentPlaying.stopSimpleExoPlayer();
intent.putExtra("data",items3.get(headerType==4?i:i-1));
context.startActivity(intent);
}
});
}
else if (headerType == 0)//pod casts
{
package LandingData.PodcastsData data = items1.get(i);
imgUrl = data.image;
title = data.title;
desc = data.title;
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, NowPlayingActivity.class);
CurrentPlaying.stopSimpleExoPlayer();
intent.putExtra("data", items1.get(i));
context.startActivity(intent);
}
});
}
else {//singings
final LandingData.SingingsData data = items2.get(i - 1);
imgUrl = data.image;
title = data.title;
desc = data.description;
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, PlaylistActivity.class);
intent.putExtra("data",data);
context.startActivity(intent);
}
});
}
Glide.with(context).load(imgUrl).into(itemViewHolder.img);
itemViewHolder.tvTitle.setText(title);
itemViewHolder.tvDesc.setText(desc);
} else if (viewHolder instanceof PreachingHeaderViewHolder) {
PreachingAdapter.PreachingHeaderViewHolder headerViewHolder = (PreachingAdapter.PreachingHeaderViewHolder) viewHolder;
headerViewHolder.viewLocationsLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, LocationsActivity.class);
intent.putExtra("sermon", true);
context.startActivity(intent);
}
});
headerViewHolder.viewApostlesLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, MembersActivity.class);
intent.putExtra("TYPE", "Apostles");
context.startActivity(intent);
}
});
headerViewHolder.viewOrdainedMinistersLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, MembersActivity.class);
intent.putExtra("TYPE", "Ordained Ministers");
context.startActivity(intent);
}
});
} else if (viewHolder instanceof SundaySchoolsHeaderViewHolder) {
PreachingAdapter.SundaySchoolsHeaderViewHolder headerViewHolder = (PreachingAdapter.SundaySchoolsHeaderViewHolder) viewHolder;
headerViewHolder.viewLocationsLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, LocationsActivity.class);
intent.putExtra("sermon",true);
context.startActivity(intent);
}
});
headerViewHolder.viewApostlesLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, MembersActivity.class);
intent.putExtra("TYPE","Apostles");
context.startActivity(intent);
}
});
headerViewHolder.viewOrdainedMinistersLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, MembersActivity.class);
intent.putExtra("TYPE","Ordained Ministers");
context.startActivity(intent);
}
});
} else if (viewHolder instanceof SingingHeaderViewHolder) {
PreachingAdapter.SingingHeaderViewHolder headerViewHolder = (PreachingAdapter.SingingHeaderViewHolder) viewHolder;
headerViewHolder.viewLocationsLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, LocationsActivity.class);
intent.putExtra("sermon",false);
context.startActivity(intent);
}
});
}
} catch (Exception e) {
}
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
public class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View itemView) {
super(itemView);
}
public void bindView(int position) {
}
}
}
这是我为响应迄今为止提供的帮助所做的事情
public static class SundaySchoolsHeaderViewHolder extends RecyclerView.ViewHolder {
FrameLayout viewApostlesLayout, viewOrdainedMinistersLayout, viewLocationsLayout;
SundaySchoolsHeaderViewHolder(View itemView) {
super(itemView);
viewApostlesLayout = itemView.findViewById(R.id.viewApostlesLayout);
viewOrdainedMinistersLayout = itemView.findViewById(R.id.viewOrdainedMinistersLayout);
//viewMinistersLayout = (FrameLayout) itemView.findViewById(R.id.viewMinistersLayout);
viewLocationsLayout = itemView.findViewById(R.id.viewLocationsLayout);
}
}
public static class SortByViewHolder extends RecyclerView.ViewHolder {
public TextView simpleTextView;
SortByViewHolder (View itemView) {
super(itemView);
simpleTextView= itemView.findViewById(R.id.sort);
}
}
public static class SingingHeaderViewHolder extends RecyclerView.ViewHolder {
FrameLayout viewLocationsLayout;
SingingHeaderViewHolder(View itemView) {
super(itemView);
viewLocationsLayout = itemView.findViewById(R.id.viewLocationsLayout);
}
}
和
}
});
} else if (viewHolder instanceof SingingHeaderViewHolder) {
PreachingAdapter.SingingHeaderViewHolder headerViewHolder = (PreachingAdapter.SingingHeaderViewHolder) viewHolder;
headerViewHolder.viewLocationsLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, LocationsActivity.class);
intent.putExtra("sermon",false);
context.startActivity(intent);
}
});
}
if (viewHolder instanceof SortByViewHolder ) {
((SortByViewHolder) viewHolder).simpleTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, LocationsActivity.class);
context.startActivity(intent);
}
});
}
} catch (Exception e) {
}
}
解决方案
您应该onClickListener
在方法内部添加onBindViewHolder
。
例如,文本视图的 viewHolder 可能是:
public static class SimpleTextViewHolder extends RecyclerView.ViewHolder {
public TextView simpleTextView;
SimpleTextViewHolder (View itemView) {
super(itemView);
simpleTextView= itemView.findViewById(R.id.simpleTextView);
}
}
然后,在onBindViewHolder
方法内部:
if (viewHolder instanceof SimpleTextViewHolder ) {
((SimpleTextViewHolder) viewHolder).simpleTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//change text according to your needs
}
});
}
推荐阅读
- ios - 如何从父 ViewController 继承 @IBOutlets?
- julia - 如何在 Julia 中将两个地块相邻放置?
- kubernetes - K8s CRD 错误:不支持的媒体类型 415
- android - Viewmodel 在第一次之后不会更改 Livedata
- c# - 来自字符串的 C# 条件,包括运算符
- node.js - 如何保持帐户会话登录?
- javascript - 如何从反应导航更改底部材质选项卡导航器的高度
- c++ - 用户定义类型的隐式类型转换
- django - 同一模型 django 中的一对一 vs 字段
- javascript - Javascript 类中的子方法