【发布时间】: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