简体   繁体   English

如何使 Recyclerview Adapter Header 中的文本可点击

[英]How to make text in Recyclerview Adapter Header clickable

I am still very new to Java, but I'm learning to at least make changes to existing code.我对 Java 仍然很陌生,但我正在学习至少对现有代码进行更改。

What I have is an app someone else developed and I am just making small changes to it.我拥有的是其他人开发的应用程序,我只是对其进行了一些小改动。 I'm trying to set a Textview "Recently Added" so that it can be clicked and changed to "By Date" and back again, then I'll have the API change according to that.我正在尝试设置Textview “最近添加”,以便可以单击并更改为“按日期”并再次返回,然后我将根据该更改 API。 If I can get help knowing where to put the onClickListener I think I can get it....如果我能得到帮助,知道将onClickListener放在哪里,我想我能得到它....

截屏

If anyone could help me I would really appreciate it.如果有人可以帮助我,我将不胜感激。 Here is the code for the PreachingAdapter.java这是 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) {

           }
    }

    }

Here is what I have done in response to the help offered so far这是我为响应迄今为止提供的帮助所做的事情

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);
        }
    }

and

                   }
                    });

                } 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) {

        }
    }


You should add the onClickListener inside the onBindViewHolder method.您应该在onBindViewHolder方法中添加onClickListener

For example, your viewHolder for the text view could be:例如,文本视图的 viewHolder 可能是:

public static class SimpleTextViewHolder extends RecyclerView.ViewHolder {
    public TextView simpleTextView;
    SimpleTextViewHolder (View itemView) {
        super(itemView);
        simpleTextView= itemView.findViewById(R.id.simpleTextView);
    }
}

and then, inside the onBindViewHolder method:然后,在onBindViewHolder方法中:

if (viewHolder instanceof SimpleTextViewHolder ) {
    ((SimpleTextViewHolder) viewHolder).simpleTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //change text according to your needs
        }
    });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM