public void removeFooterView() { if(mFooterViewContainer!=null) { mFooterViewContainer.removeAllViews(); Adapter adapter = getAdapter(); if (adapter != null) { adapter.notifyItemChanged(adapter.getItemCount() - 2); } } } public void addFooterView(View footerView) {
public void addFooterView(View footerView) { ensureFooterViewContainer(); mFooterViewContainer.addView(footerView); Adapter adapter = getAdapter(); if (adapter != null) { adapter.notifyItemChanged(adapter.getItemCount() - 2); } }
public void removeHeaderAllView() { if(mHeaderViewContainer!=null) { mHeaderViewContainer.removeAllViews(); Adapter adapter = getAdapter(); if (adapter != null) { adapter.notifyItemChanged(1); } } }
public void addFooterView(View footerView) { ensureFooterViewContainer(); mFooterViewContainer.addView(footerView); Adapter adapter = getAdapter(); if (adapter != null) { adapter.notifyItemChanged(adapter.getItemCount() - 2); } }
public void addHeaderView(View headerView) { ensureHeaderViewContainer(); mHeaderViewContainer.addView(headerView); Adapter adapter = getAdapter(); if (adapter != null) { adapter.notifyItemChanged(1); } }
public void restartEndLoading() { mViewState = LOADING_VIEW; int last = getLastPosition(this); if (getAdapter() != null) { getAdapter().notifyItemChanged(last, 1); } }
@Override public void onResponse(Call<StarResponse> call, Response<StarResponse> response) { if (response.isSuccessful()) { message.setMessageStar(true); recyclerView.getAdapter().notifyItemChanged(position); Toast.makeText(getContext(), R.string.message_starred, Toast.LENGTH_SHORT).show(); } else { Log.d("starMessage", "Response : " + response.body().getMessage()); Toast.makeText(getContext(), R.string.network_error, Toast.LENGTH_SHORT).show(); } }
@Override public void onResponse(Call<StarResponse> call, Response<StarResponse> response) { if (response.isSuccessful()) { message.setMessageStar(false); recyclerView.getAdapter().notifyItemChanged(position); Toast.makeText(getContext(), R.string.message_un_starred, Toast.LENGTH_SHORT).show(); } else { Log.d("unStarMessage", "Response : " + response.body().getMessage()); Toast.makeText(getContext(), R.string.network_error, Toast.LENGTH_SHORT).show(); } }
mRecyclerBinder.notifyChangeSetComplete(true, NO_OP_CHANGE_SET_COMPLETE_CALLBACK); verify(adapter, never()).notifyItemChanged(anyInt()); verify(adapter, never()).notifyItemRangeChanged(anyInt(), anyInt()); verify(adapter, times(1)).notifyItemChanged(i);
mInternalAdapter.notifyItemChanged(position + i);
mRecyclerBinder.notifyChangeSetComplete(true, NO_OP_CHANGE_SET_COMPLETE_CALLBACK); verify(adapter, never()).notifyItemChanged(anyInt()); verify(adapter, never()).notifyItemRangeChanged(anyInt(), anyInt()); .build()); mRecyclerBinder.notifyChangeSetComplete(true, NO_OP_CHANGE_SET_COMPLETE_CALLBACK); verify(adapter, times(1)).notifyItemChanged(0);
@Override public void onClick(View v) { Context context = getContext2(); if (null == context) { return; } String text = mBuilder.getText(); if (TextUtils.isEmpty(text)) { mBuilder.setError(getString(R.string.label_text_is_empty)); } else if (getString(R.string.default_download_label_name).equals(text)) { mBuilder.setError(getString(R.string.label_text_is_invalid)); } else if (EhApplication.getDownloadManager(context).containLabel(text)) { mBuilder.setError(getString(R.string.label_text_exist)); } else { mBuilder.setError(null); mDialog.dismiss(); EhApplication.getDownloadManager(context).renameLabel(mOriginalLabel, text); if (mAdapter != null) { mAdapter.notifyItemChanged(mPosition); } } } }
/** * Updates the item at position. The {@link RecyclerView} gets notified immediately about the item * being updated. If the item's position falls within the currently visible range, the layout is * immediately computed on the UiThread. */ @UiThread public final void updateItemAt(int position, RenderInfo renderInfo) { ThreadUtils.assertMainThread(); if (SectionsDebug.ENABLED) { Log.d( SectionsDebug.TAG, "(" + hashCode() + ") updateItemAt " + position + ", name: " + renderInfo.getName()); } final ComponentTreeHolder holder; final boolean renderInfoWasView; synchronized (this) { holder = mComponentTreeHolders.get(position); renderInfoWasView = holder.getRenderInfo().rendersView(); assertNotNullRenderInfo(renderInfo); mRenderInfoViewCreatorController.maybeTrackViewCreator(renderInfo); updateHolder(holder, renderInfo); } // If this item is rendered with a view (or was rendered with a view before now) we need to // notify the RecyclerView's adapter that something changed. if (renderInfoWasView || renderInfo.rendersView()) { mInternalAdapter.notifyItemChanged(position); } mViewportManager.setShouldUpdate(mViewportManager.updateAffectsVisibleRange(position, 1)); }
@Test public void testUpdateAsyncOnInsertedViewToComponent() { final RecyclerView.Adapter adapter = mock(RecyclerView.Adapter.class); final RecyclerBinder recyclerBinder = createRecyclerBinderWithMockAdapter(adapter); final ViewRenderInfo renderInfo = ViewRenderInfo.create() .viewBinder(new SimpleViewBinder()) .viewCreator(VIEW_CREATOR_1) .build(); recyclerBinder.measure( new Size(), makeSizeSpec(1000, EXACTLY), makeSizeSpec(1000, EXACTLY), null); recyclerBinder.insertItemAtAsync(0, renderInfo); recyclerBinder.notifyChangeSetCompleteAsync(true, NO_OP_CHANGE_SET_COMPLETE_CALLBACK); mLayoutThreadShadowLooper.runToEndOfTasks(); final ComponentRenderInfo newRenderInfo = ComponentRenderInfo.create() .component( TestDrawableComponent.create(mComponentContext).widthPx(50).heightPx(50).build()) .build(); recyclerBinder.updateItemAtAsync(0, newRenderInfo); recyclerBinder.notifyChangeSetCompleteAsync(true, NO_OP_CHANGE_SET_COMPLETE_CALLBACK); verify(adapter).notifyItemChanged(0); final ComponentTreeHolder holder = recyclerBinder.getComponentTreeHolderAt(0); assertThat(holder.getRenderInfo()).isEqualTo(newRenderInfo); assertThat(holder.isTreeValid()).isTrue(); mLayoutThreadShadowLooper.runToEndOfTasks(); }
@Test public void testUpdateAsyncOnNonInsertedItem() { final RecyclerView.Adapter adapter = mock(RecyclerView.Adapter.class); final RecyclerBinder recyclerBinder = createRecyclerBinderWithMockAdapter(adapter); final Component component = TestDrawableComponent.create(mComponentContext).widthPx(100).heightPx(100).build(); final RenderInfo renderInfo = ComponentRenderInfo.create().component(component).build(); recyclerBinder.measure( new Size(), makeSizeSpec(1000, EXACTLY), makeSizeSpec(1000, EXACTLY), null); recyclerBinder.insertItemAtAsync(0, renderInfo); recyclerBinder.notifyChangeSetCompleteAsync(true, NO_OP_CHANGE_SET_COMPLETE_CALLBACK); assertThat(recyclerBinder.getItemCount()).isEqualTo(0); final ComponentRenderInfo newRenderInfo = ComponentRenderInfo.create() .component( TestDrawableComponent.create(mComponentContext).widthPx(50).heightPx(50).build()) .build(); recyclerBinder.updateItemAtAsync(0, newRenderInfo); recyclerBinder.notifyChangeSetCompleteAsync(true, NO_OP_CHANGE_SET_COMPLETE_CALLBACK); assertThat(recyclerBinder.getItemCount()).isEqualTo(0); verify(adapter, never()).notifyItemChanged(anyInt()); mLayoutThreadShadowLooper.runToEndOfTasks(); final ComponentTreeHolder holder = recyclerBinder.getComponentTreeHolderAt(0); assertThat(holder.getRenderInfo()).isEqualTo(newRenderInfo); assertThat(holder.isTreeValid()).isTrue(); assertThat(holder.hasCompletedLatestLayout()).isTrue(); }
@Test public void testUpdateAsyncOnInsertedItem() { final RecyclerView.Adapter adapter = mock(RecyclerView.Adapter.class); final RecyclerBinder recyclerBinder = createRecyclerBinderWithMockAdapter(adapter); final Component component = TestDrawableComponent.create(mComponentContext).widthPx(100).heightPx(100).build(); final RenderInfo renderInfo = ComponentRenderInfo.create().component(component).build(); recyclerBinder.measure( new Size(), makeSizeSpec(1000, EXACTLY), makeSizeSpec(1000, EXACTLY), null); recyclerBinder.insertItemAtAsync(0, renderInfo); recyclerBinder.notifyChangeSetCompleteAsync(true, NO_OP_CHANGE_SET_COMPLETE_CALLBACK); mLayoutThreadShadowLooper.runToEndOfTasks(); final ComponentRenderInfo newRenderInfo = ComponentRenderInfo.create() .component( TestDrawableComponent.create(mComponentContext).widthPx(50).heightPx(50).build()) .build(); recyclerBinder.updateItemAtAsync(0, newRenderInfo); recyclerBinder.notifyChangeSetCompleteAsync(true, NO_OP_CHANGE_SET_COMPLETE_CALLBACK); verify(adapter, never()).notifyItemChanged(anyInt()); final ComponentTreeHolder holder = recyclerBinder.getComponentTreeHolderAt(0); assertThat(holder.getRenderInfo()).isEqualTo(newRenderInfo); assertThat(holder.isTreeValid()).isTrue(); mLayoutThreadShadowLooper.runToEndOfTasks(); }
@Test public void testUpdateAsyncOnInsertedViewFromComponent() { final RecyclerView.Adapter adapter = mock(RecyclerView.Adapter.class); final RecyclerBinder recyclerBinder = createRecyclerBinderWithMockAdapter(adapter); final Component component = TestDrawableComponent.create(mComponentContext).widthPx(100).heightPx(100).build(); final RenderInfo renderInfo = ComponentRenderInfo.create().component(component).build(); recyclerBinder.measure( new Size(), makeSizeSpec(1000, EXACTLY), makeSizeSpec(1000, EXACTLY), null); recyclerBinder.insertItemAtAsync(0, renderInfo); recyclerBinder.notifyChangeSetCompleteAsync(true, NO_OP_CHANGE_SET_COMPLETE_CALLBACK); mLayoutThreadShadowLooper.runToEndOfTasks(); final RenderInfo newRenderInfo = ViewRenderInfo.create() .viewBinder(new SimpleViewBinder()) .viewCreator(VIEW_CREATOR_1) .build(); recyclerBinder.updateItemAtAsync(0, newRenderInfo); recyclerBinder.notifyChangeSetCompleteAsync(true, NO_OP_CHANGE_SET_COMPLETE_CALLBACK); verify(adapter).notifyItemChanged(0); final ComponentTreeHolder holder = recyclerBinder.getComponentTreeHolderAt(0); assertThat(holder.getRenderInfo()).isEqualTo(newRenderInfo); mLayoutThreadShadowLooper.runToEndOfTasks(); }
@Implementation public void notifyItemChanged(int position) { prepare(position, position); directly().notifyItemChanged(position); relayout(); }
@Implementation public void notifyItemChanged(int position, Object payload) { prepare(position, position); directly().notifyItemChanged(position, payload); relayout(); }
public void addHeaderView(View headerView) { ensureHeaderViewContainer(); mHeaderViewContainer.addView(headerView); Adapter adapter = getAdapter(); if (adapter != null) { adapter.notifyItemChanged(1); } } public void removeFooterView() {