当前位置: 首页 > 面试题库 >

RecyclerVIew onItemClickListener不起作用

艾正浩
2023-03-14
问题内容

我正在 RecyclerView上* 工作,并尝试使用 Interface来 对recyclcerview的每个项目使用点击监听器 *

这是我的活动课:

public class LegacyHomeActivity extends ActivityBaseDrawer {
    private List<LegacyVideo> legacyVideoList = null;
    private List<Video> videoList = new ArrayList<>();
    private RecyclerView mRecyclerView;
    private LegacyModeHomeAdapter adapter;

    @Override
    public void onNetworkStateChanged(boolean connected) {

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        isLegacyMode = true;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_legacy_home);
        if (getSupportActionBar() != null) {
            setTitle(getString(R.string.footy_legacy_home));
        }
        ImageView legacy_live_score_imageView = (ImageView) findViewById(R.id.legacy_live_score_imageView);
        legacy_live_score_imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(LegacyHomeActivity.this, LegacyLiveScoreActivity.class));
            }
        });
        ImageView legacy_highlight_imageView = (ImageView) findViewById(R.id.legacy_highlight_imageView);
        legacy_highlight_imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(LegacyHomeActivity.this, LegacyHighlightsActivity.class));
            }
        });
        ImageView legacy_news_imageView = (ImageView) findViewById(R.id.legacy_news_imageView);
        legacy_news_imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(LegacyHomeActivity.this, LegacyNewsActivity.class));
            }
        });
        mRecyclerView = (RecyclerView) findViewById(R.id.legacy_mood_recyclerview);
        final LinearLayoutManager layoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false);
        mRecyclerView.setLayoutManager(layoutManager);
        adapter = new LegacyModeHomeAdapter(getApplicationContext(), itemClickListener);
        mRecyclerView.setAdapter(adapter);
        mRecyclerView.setHasFixedSize(true);
        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
        swipeRefreshLayout.setColorSchemeResources(R.color.ThemeColor,
                R.color.ThemeColor, R.color.ThemeColor);
        swipeRefreshLayout
                .setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {

                    @Override
                    public void onRefresh() {
                        getLegacyVideoList();
                    }
                });

        circularProgressView = (CircularProgressView) findViewById(R.id.circularProgressView);
        showLoadingProgress();
        getLegacyVideoList();
    }

    LegacyVideoClickListener itemClickListener = new LegacyVideoClickListener() {
        @Override
        public void onItemClickListener(int position) {
            Video video = videoList.get(position);
            VideoPlayerUtil.initVideoPLayer(video, LegacyHomeActivity.this);
        }
    };

    private void getLegacyVideoList() {
        FootyLightAPI api = new FootyLightAPI(getApplicationContext(), mResponseListener);
        api.getLegacyHomeVideoList();
    }

    private final FootyLightAPI.ResponseListener mResponseListener = new FootyLightAPI.ResponseListener() {
        @Override
        public void getResponse(int apiId, final String response) {
            switch (apiId) {
                case R.integer.ApiLegacyVideoList:
                    Log.e("Legacy  ............", "Response:................" + response);
                    try {
                        final ObjectMapper mapper = new ObjectMapper();
                        legacyVideoList = mapper.readValue(response, new TypeReference<List<LegacyVideo>>() {
                        });
                        if (legacyVideoList != null && legacyVideoList.size() > 0) {
                            videoList.clear();
                            for (LegacyVideo video : legacyVideoList) {
                                Log.e("Legacy video", "" + video.getTitle());
                                Video videoItem = new Video();
                                if (video.getItemType().equalsIgnoreCase("video")) {
                                    videoItem.setTitle(video.getTitle());
                                    videoItem.setLink(video.getLink());
                                    videoItem.setThumb(video.getThumb());
                                    videoItem.setContentType(video.getContentType());
                                    videoItem.setContentUrl(video.getContentUrl());
                                    videoItem.setDmcaLabel(video.getDmcaLabel());
                                    videoItem.setDmcaContent(video.getDmcaContent());
                                    videoItem.setDmcaDisclaimer(video.getDmcaDisclaimer());
                                    videoItem.setDisplayType(video.getDisplayType());
                                    videoList.add(videoItem);
                                }

                            }
                        }
                        Log.e("VideoList", "........." + videoList.size());
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                showVideoAdapter();
                                hideLoadingProgress();

                            }
                        });


                    } catch (Exception e) {

                    }
                    break;
                default:
                    break;
            }
        }

        @Override
        public void getError(int apiId, int errorCode) {
        }

        @Override
        public void getResponse(String trackingStr, int apiId, String response) {

        }

        @Override
        public void getError(String trackingStr, int apiId, int errorCode) {

        }
    };

    public void showVideoAdapter() {
        if (adapter != null) {
            adapter.setVideos(videoList);
        }
    }
}

这是我的适配器类

public class LegacyModeHomeAdapter extends RecyclerView.Adapter<LegacyModeHomeAdapter.ItemViewHolder> {
    private List<Video> videoList;
    private Context mContext;
    private LegacyVideoClickListener onVideosRVItemClickListener;

    private LayoutInflater getLayoutInflater() {
        return LayoutInflater.from(mContext);
    }

    public LegacyModeHomeAdapter(Context mContext, LegacyVideoClickListener onVideosRVItemClickListener) {
        this.mContext = mContext;
        this.onVideosRVItemClickListener = onVideosRVItemClickListener;
    }

    public void setVideos(List<Video> videosList) {
        this.videoList = videosList;
        notifyDataSetChanged();
    }

    @Override
    public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = getLayoutInflater().inflate(R.layout.layout_legacy_mode_home_video_item, parent, false);
        return new ItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ItemViewHolder holder, final int position) {
        Video video = videoList.get(position);
        Picasso.with(mContext).load(video.getThumb()).into(holder.categoryImage);
        holder.categoryName.setText(video.getTitle());
        holder.title_image_btn.setText(video.getDisplayType());
        holder.VideosItemClickListener(position, onVideosRVItemClickListener);
    }

    @Override
    public int getItemCount() {
        if (videoList != null) {
            return videoList.size();
        }
        return 0;
    }

    public class ItemViewHolder extends RecyclerView.ViewHolder {
        private TextView categoryName;
        private ImageView categoryImage;
        private Button title_image_btn;

        public ItemViewHolder(View itemView) {
            super(itemView);
            categoryName = (TextView) itemView.findViewById(R.id.categoryName);
            categoryImage = (ImageView) itemView.findViewById(R.id.categoryImage);
            title_image_btn = (Button) itemView.findViewById(R.id.title_image_btn);
        }

        public void VideosItemClickListener(final int position, final LegacyVideoClickListener videosRVItemClickListener) {
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    videosRVItemClickListener.onItemClickListener(position);
                }
            });
        }

    }
}

最后我将这个接口用于侦听器:

public interface LegacyVideoClickListener {
    public void onItemClickListener(int position);
}

此过程可以正常运行我的应用程序的所有其他部分,但不适用于这种情况。我不知道问题出在哪里。请帮我 。


问题答案:

您这种方法

@Override 
    public void onBindViewHolder(final ViewHolder holder, int position) {
        final String element = mDataset[position];

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               //your code 
            }
        });
    }


 类似资料:
  • 因此,我在一个控制器中有一个非常简单的代码片段,在这个代码片段中,我使用从外部文件中获取数据,它工作得很好!但是当我使用时,我会在控制台中得到一个

  • 问题内容: 正则表达式似乎还可以,因为第一行将子字符串正确替换为“ helloworld”,但是后者却不匹配,因为我看不到“ whynothelloworld?”。在控制台上 问题答案: 期望 整个 字符串匹配,而不仅仅是子字符串。 使用正则表达式匹配器对象的方法代替:

  • 问题内容: 我的 活动无法正常进行。 以下是我一一尝试过的代码段,但无济于事: 使用方法实施 设定方法 使用方法 这是我完整的MainActivity.java文件: 问题答案: 我遇到了同样的问题,我发现Android非常注重布局XML。我将NavigationView作为DrawerLayout的第一个孩子,但是出于某些愚蠢的原因,它必须是最后一个孩子。因此,您的布局必须具有以下顺序的元素:

  • 问题内容: 在什么情况下,java的System.out.println无法产生任何输出。我在方法内部调用了它,有时在调用该方法时得到了println,而有时却没有。 更新:我还在println之后使用System.out.flush()。 更新:感谢您的调试帮助。原来,阻止调用打开了一个对话框,使输出看起来与正常顺序大相径庭。我以为我要打印消息的方法是在对话框关闭时被调用的,但是该方法本身就是在

  • 问题内容: 第一次运行此sql时,需要39秒,再次运行并增加SQL_NO_CACHE时,它似乎没有生效: 我在这里尝试了多种方法 甚至重新启动mysql服务器或更改表名,但我仍然不能让39秒运行此SQL 我替换了另一个SQL,并在第一次运行SQL_NO_CACHE上增加了一个,问题是一样的: 是什么原因?如何获得相同的SQL运行时? 我想找到一种方法来优化此SQL以执行39秒 顺便说一句: 不起作

  • 问题内容: 我正在尝试使用此API用Java开发TS3 Bot:https : //github.com/TheHolyWaffle/TeamSpeak-3-Java- API 我有一个客户端所有服务器组的列表: 现在,我检查列表是否包含组: 结果是错误的。我100%确定此列表包含ServerGroup。 已经使用Sysouts进行了检查。 这是ServerGroup类的链接:[https]( h

  • 问题内容: 我有一个Javascript函数,该函数应使用每次更新该函数时都会增加的数字来更新表单中的隐藏输入字段。 它最初与 getElementById() 一起工作,但是因为我不得不重新设计表单,所以我无法使用php函数为元素分配一个单独的ID,因此我所拥有的只是该元素的唯一名称。 因此,我决定使用Javascript中的 getElementsByName() 修改元素。 这是该元素的HT

  • 问题内容: 请检查这个要点并告诉我,怎么了? 为什么我看不到我的留言? 要点:https : //gist.github.com/cnaize/895f61b762a9f5ee074c 如果简单,我有两个功能: 和功能: 为什么不起作用? 编辑: 我已经更新了要点。现在在哪里: 我在日志中: 但是我什么也没看到。 有任何想法吗? 问题答案: 冲洗工作正常。问题是Chrome的纯文本呈现器在显示任何