【问题标题】:Accessing a field/variable of a recycler viewholder(listItem) in Activity/Fragments在 Activity/Fragments 中访问回收站 viewholder(listItem) 的字段/变量
【发布时间】:2020-01-07 21:25:36
【问题描述】:

我正在使用 recyclerview 来显示多种视图类型,但是我正在尝试找到一种可能的方法来从活动/片段中访问 viewholder/listItem 字段/变量。就像我的情况一样,我有 3 个查看器(一个用于图像,一个用于文本,一个用于视频)。

谢谢。任何帮助将不胜感激。

 public class VideoHolder extends RecyclerView.ViewHolder {//0
        final TextView tv,name,time,caption,allcomments,likescount,commentcount;

        final ImageView img_vol, img_playback, overflow, imagehear, share, image_sent_friendReq, profile_image, send_friendReq, chat;

        final PlayerView player;

        public SimpleExoPlayer simpleExoPlayer;

        public VideoHolder(View x) {
            super(x);
            tv = ButterKnife.findById(x, R.id.tv);
            img_vol = ButterKnife.findById(x, R.id.img_vol);
            img_playback = ButterKnife.findById(x, R.id.img_playback);
            overflow = ButterKnife.findById(x, R.id.overflow);
            name = ButterKnife.findById(x, R.id.name);
            time = ButterKnife.findById(x, R.id.time);
            caption = ButterKnife.findById(x, R.id.caption);
            imagehear = ButterKnife.findById(x, R.id.image_heart);
            share = ButterKnife.findById(x, R.id.share);
            allcomments = ButterKnife.findById(x, R.id.view_all_comments);
            likescount = ButterKnife.findById(x, R.id.likes_count);
            commentcount = ButterKnife.findById(x, R.id.comment_count);
            image_sent_friendReq = ButterKnife.findById(x, R.id.image_sent_friendReq);
            profile_image = ButterKnife.findById(x, R.id.profile_image);
            send_friendReq = ButterKnife.findById(x, image_send_friendreq);
            chat = ButterKnife.findById(x, R.id.chat);
            player = ButterKnife.findById(x, R.id.player);

            mediator = new Mediator(mCtx);
            SharedPreferences pref = mCtx.getSharedPreferences("MyPref", Context.MODE_PRIVATE);
            UID = pref.getString("UserID", "");

            if(fragment.equals("FriendsFragment")){
                send_friendReq.setVisibility(View.GONE);
                image_sent_friendReq.setVisibility(View.GONE);
            }
            else if(fragment.equals("ProfileActivity")){
                send_friendReq.setVisibility(View.GONE);
                chat.setVisibility(View.GONE);
                overflow.setVisibility(View.GONE);
//                allcomments.setEnabled(false);
            }
            else {
                chat.setVisibility(View.GONE);
            }
        }
        //override this method to get callback when video starts to play
//        @Override
//
//        @Override
//        public void pauseVideo() {
//            super.pauseVideo();
//            img_playback.setImageResource(R.drawable.ic_play);
//        }
    }

片段:

 @Override
    public void onDestroyView() {
        super.onDestroyView();

        unbinder.unbind();

        //Release the player
//        ((MyVideosAdapter.VideoHolder)RecyclerView.ViewHolder).simpleExoPlayer.release();
        for(int position = 0; position<modelList.size(); position++){
            if(mAdapter.getItemViewType(position)== MyVideosAdapter.TYPE_VIDEO){

            }
        }


    }

【问题讨论】:

  • 访问是什么意思,您是想传递一些价值还是想听取用户对这些视图的操作?
  • 尝试访问该特定视图字段的值,例如我可以进行类型转换还是有任何其他方式。
  • 发布您的自定义适配器类会更有帮助。无论如何,我提供了一个草稿版本来完成它。 if (adapter.getItemViewType(position) == VIEW_TYPE_VIDEO){ ((VideoObject)adapter.getItemAtPosition(position).getVideoName()}.
  • @Farid 谢谢,我已经完成了更改,看看我试图访问的代码和适配器,实际上我想在片段中的销毁和暂停方法上释放 exoplayer 实例本身。

标签: android-studio android-fragments android-activity android-recyclerview android-viewholder


【解决方案1】:

我们使用接口来评估 RecyckerView 字段和变量。参见代码 sn-p。在这段代码中,我使用了一个接口与活动/片段进行通信。我已将回收站视图项目值传递给项目点击活动

这样

界面

public interface TrackItemOnclick {
    public  void onItemClick(View view,int position,String userType);
}

HomeActivity

 customAdapter = new CustomAdapter (getActivity(), dataList, new TrackItemOnclick() {
                @Override
                public void onItemClick(View view, int position,String userType) {
                    String date=CommonUtils.getTodayDate();
                    Log.e(TAG,"check data"+userType);
                    //go to detail screen

                }
            });

自定义适配器

constructor

public TodayAdapter(Context context, List<TracksBeen.Data.Today> tracklist, TrackItemOnclick onclick) {
        this.context = context;
        this.tracklist = tracklist;
        this.onclick = onclick;
    }

 //onclick listner
        myholder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onclick.onItemClick(v, i,tracklist.get(i).getTrackRaceIsGuestAvailable());
            }
        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多