Articles of android viewholder

RecyclerView.Adapter的onCreateViewHolder被调用两次或更多次,多次

我目前正在开发一个使用RecyclerView的应用程序。 在查看LogCat时,我注意到onCreateViewHolder在实例化后被调用了两次。 09-22 05:22:55.209 V/Adapter﹕ Construct 09-22 05:22:55.213 V/Adapter﹕ onCreateViewHolder 09-22 05:22:55.224 V/Adapter﹕ onBindViewHolder 09-22 05:22:55.240 V/Adapter﹕ onCreateViewHolder 09-22 05:22:55.247 V/Adapter﹕ onBindViewHolder 另外onBindViewHolder被调用了两次虽然我知道只要项目被回收就会被调用。 但我认为onCreateViewHolder只需调用一次即可。 这是exception行为吗? 如果是这样,怎么解决?

在onCreateViewHolder中获取View的位置

我正在使用带有ImageView和TextView的单行布局的RecyclerView。 我想为View实现一个OnClickListener,而不是为单独的ViewHolder对象实现。 如何在适配器中获取视图的位置? 现在我正在删除点击的评论,但我无法选择点击的视图。 我在适当的行中添加了一个TODO。 public class CommentAdapter extends RecyclerView.Adapter { /** List of Comment objects */ private List mCommentList; /** Database with Comment objects */ private CommentsDataSource mDataSource; /** * Construcutor for CommentAdapter * * @param commentList List of Comment objects * @param dataSource Database with Comment objects */ public CommentAdapter(List commentList, CommentsDataSource dataSource) […]

当滚动列表时,RecyclerView.getChild(index)显示为null(索引搞砸了)

我一直在为我的android应用程序使用SwipeableRecyclerView来为我的recyclerView启用滑动。 RecyclerView包含cardViews列表。 我试图为卡片实现撤消function,当向左滑动时会被删除(第一次滑动显示撤消,下一次滑动触发器删除) 我正在尝试以下代码(部分工作,我猜) SwipeableRecyclerViewTouchListener srvTouchListner = new SwipeableRecyclerViewTouchListener(rvTimerList, new SwipeableRecyclerViewTouchListener.SwipeListener(){ @Override public boolean canSwipe(int i) { return true; } @Override public void onDismissedBySwipeLeft(RecyclerView recyclerView, int[] ints) { for(int position : ints){ View view = recyclerView.getChildAt(position); if (view.getTag(R.string.card_undo) == null) { if(viewStack == null) { saveToViewStack(position, view); final ViewGroup viewGroup = (ViewGroup) view.findViewById(R.id.time_card2); view.setTag(R.string.card_undo, “true”); […]

仅将RecyclerView中的视图动态添加到当前项目

我在RecyclerView动态地将视图添加到我的项目中。 这些添加的视图应该只与它们被添加到的项目相关,但是当我滚动时我遇到了问题。 似乎View被回收并加载了一个新项目,但之前添加的视图仍然存在,现在只有错误的项目。 我假设它只是因为ViewHolder被重用,所以添加的项目在加载时会再次出现一个新项目。 怎么会解决这个问题呢?

RecyclerView – 当视图不再可见时回调

我有一个带有Adapter和LayoutManager的RecyclerView。 适配器有大约15种不同的ViewHolders。 其中一个包含加载外部内容的WebView(其中99%是YouTube以外的video)。 当任何适配器视图离开屏幕时出现问题 – WebView中的video继续播放并且声音正在播放。 不过,这对我来说是可以接受的。 当我转移到另一个Activity时,关键问题就开始了。 video的声音仍然存在。 当任何子视图改变可见性状态(意味着从显示中消失)时,RecyclerView是否有任何方式可以通知我?

如何从RecyclerView.Adapter 打开片段

1.TabLayout – tab1 (Fragment1) – tab2 (Fragment2) – tab3 (Fragment3) * RecyclerView + CardView (OnClick) 在CardView ClickListner上打开tab3中的另一个片段。 那么如何在tab3中打开片段。 错误在getFragmentManager() : FragmentTransaction transaction = getFragmentManager().beginTransaction(); 而不是这个,我试过: FragmentTransaction transaction = activity.getFragmentManager().beginTransaction(); FragmentTransaction transaction = itemview.getContext().getFragmentManager().beginTransaction(); 但错误并未解决。 这是我的代码: public class CardAdapter extends RecyclerView.Adapter { List mItems; private int lastPosition = -1; Context context; TaskFragment main; public CardAdapter(Context context,TaskFragment […]

为什么在ViewHolder模式中ViewHolder类应该是静态的?

我只是想更好地理解我经常用来优化ListView的以下模式 我的读物只指出了一个事实,即静态内部类被视为顶级类。 与成员类(非静态)相比,这样的东西有什么好处? @Override public View getView(int position, View convertView, ViewGroup parent) { Comment comment = getItem(position); ViewHolder holder; if (convertView == null){ holder = new ViewHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.mylayout, null); holder.nickname = (TextView) ((ViewGroup) convertView).findViewById(R.id.nickname); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.nickname.setText(comment.getMember_nickname()); CharSequence return convertView; } public static class ViewHolder{ TextView nickname; }

使用ViewHolder显示ListView中最后一个列表项的状态

int globalPosition ; ………….. buttonAllData.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub new UploadBulkData(globalPosition).execute(); } }); …….. class UploadBulkData extends AsyncTask { private ProgressDialog pDialog; int dataPosition; public UploadBulkData(int position){ this.dataPosition = position; } @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(UploadActivity.this); pDialog.setMessage(“Uploading…”); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); } […]

即使RecyclerView.findViewHolderForAdapterPosition()在该位置返回null,也不会在视图位置调用onBindViewHolder()

我有一个包含13个项目的列表(虽然可以添加或删除项目),位置0-12。 当首次显示包含RecyclerView的片段时,用户只能看到位置0到7(位置7只有一半可见)。 在我的适配器中,每次视图持有者绑定/绑定时都会记录(如果语法适用于此处为idk)并记录其位置。 适配器 @Override public void onBindViewHolder(final ViewHolder holder, final int position) { Log.d(TAG, “onBindViewHolder() position: ” + position); … } 从我的Log我看到0-7的位置是绑定的: 我有一个selectAll()方法,通过适配器位置获取每个ViewHolder 。 如果返回的holder不是null我使用返回的holder来更新视图以显示它被选中。 如果返回的持有者为null我调用selectOnBind()方法,该方法在该位置更新标记视图,以显示它在绑定时被选中而不是实时,因为它当前未显示: public void selectAll() { for (int i = 0; i < numberOfItemsInList; i++) { MyAdapter.ViewHolder holder = (MyAdapter.ViewHolder) mRecyclerView.findViewHolderForAdapterPosition(i); Log.d(TAG, "holder at position " + i + " […]

Android:滚动后RecyclerView内容搞砸了

我正在使用RecyclerView显示标记列表,并且值的每个标记都显示为CardView。 但是,在向下滚动RecyclerView并向后滚动之后,卡片的某些内容会丢失,如下面的两个屏幕截图所示。 滚动后,红色矩形中的内容将丢失。 在滚动之前; 在滚动之后; 我想知道它是否是RecyclerView的一个错误,并在Googling之后找不到解决方案。 除标题外,所有观点都是看不见的,它们的可见性取决于标记的价值。 有谁知道为什么会这样?