下面列出了androidx.recyclerview.widget.RecyclerView#Adapter ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Determine if it is the last row.
*
* @param view ChildView
* @param parent RecyclerView
* @return true is the last row.
*/
private boolean isLastRow(View view, RecyclerView parent) {
RecyclerView.Adapter adapter = parent.getAdapter();
if (adapter == null) {
return false;
}
int childCount = adapter.getItemCount();
int position = ((RecyclerView.LayoutParams) view.getLayoutParams()).getViewLayoutPosition();
RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
if (layoutManager instanceof GridLayoutManager) {
int spanCount = ((GridLayoutManager) layoutManager).getSpanCount();
if (mOrientation == VERTICAL) {
childCount = childCount - childCount % spanCount;
return position >= childCount;
}
return (position + 1) % spanCount == 0;
} else if (layoutManager instanceof LinearLayoutManager) {
return position + 1 == childCount;
}
return false;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuItemInspect:
showInspectDialog();
break;
case R.id.scrollToBottom:
showScrollToPositionDialog();
break;
case R.id.reloadMenuItem:
RecyclerView.Adapter adapter = recyclerView.getAdapter();
if (adapter instanceof SectioningAdapter) {
((SectioningAdapter) adapter).notifyAllSectionsDataSetChanged();
} else {
adapter.notifyDataSetChanged();
}
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
// Use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView.
recyclerView.setHasFixedSize(true);
// Specify a linear layout manager.
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
// Update the RecyclerView item's list with menu items and banner ads.
addMenuItemsFromJson();
addBannerAds();
loadBannerAds();
// Specify an adapter.
RecyclerView.Adapter<RecyclerView.ViewHolder> adapter = new RecyclerViewAdapter(this,
recyclerViewItems);
recyclerView.setAdapter(adapter);
}
public void setAdapter(RecyclerView.Adapter adapter) {
if (adapter != this.adapter) {
if (this.adapter != null) {
this.adapter.unregisterAdapterDataObserver(adapterObserver);
}
this.adapter = adapter;
if (this.adapter != null) {
if (recyclerView != null) {
recyclerView.setAdapter(this.adapter);
}
adapter.registerAdapterDataObserver(adapterObserver);
if (adapter.getItemCount() > 0) {
emptyView.setVisibility(View.GONE);
recyclerView.setVisibility(View.VISIBLE);
} else {
emptyView.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
}
}
}
}
@Override
public final <VH extends RecyclerView.ViewHolder> void setSingleChoiceItems(
@Nullable final RecyclerView.Adapter<VH> adapter,
@Nullable final RecyclerView.LayoutManager layoutManager, final int checkedItem,
@Nullable final DialogInterface.OnClickListener listener) {
this.items = null;
this.iconResourceIds = null;
this.singleChoiceItems = null;
this.multiChoiceItems = null;
this.adapter = adapter != null ?
new RecyclerViewAdapterWrapper<>(getContext(), adapter, new SingleChoiceMode()) :
null;
this.layoutManager = adapter != null ?
(layoutManager != null ? layoutManager : new LinearLayoutManager(getContext())) :
null;
this.singleChoiceListener = adapter != null ? listener : null;
this.multiChoiceListener = null;
if (checkedItem != -1 && this.adapter != null) {
this.adapter.setItemChecked(checkedItem, true);
}
attachAdapter();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Dismiss on click outside
AppCompatDialog dialog = (AppCompatDialog) getDialog();
if (dialog != null) {
dialog.setCanceledOnTouchOutside(true);
}
// UI
Context context = getContext();
if (context != null) {
RecyclerView standardComponentsRecyclerView = view.findViewById(R.id.standardComponentsRecyclerView);
standardComponentsRecyclerView.setHasFixedSize(true);
standardComponentsRecyclerView.setLayoutManager(new LinearLayoutManager(context, RecyclerView.VERTICAL, false));
RecyclerView.Adapter standardBoardSizesAdapter = new StandardComponentsAdapter(mSelectedComponent, components -> {
mSelectedComponent = components;
if (mListener != null) {
mListener.onComponentsSelected(components, mIs400KhzEnabled);
dismiss();
}
});
standardComponentsRecyclerView.setAdapter(standardBoardSizesAdapter);
SwitchCompat mode400HhzSwitch = view.findViewById(R.id.mode400HhzSwitch);
mode400HhzSwitch.setChecked(mIs400KhzEnabled);
mode400HhzSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (buttonView.isPressed()) {
mIs400KhzEnabled = isChecked;
if (mListener != null) {
mListener.onComponentsSelected(mSelectedComponent, mIs400KhzEnabled);
}
}
});
}
}
/**
* Set a new {@link RecyclerView.Adapter} that implements {@link FastScroller.SectionIndexer}
* to provide child views for the RecyclerView and section text for the FastScroller.
*
* @param adapter The new {@link RecyclerView.Adapter} to set, or null to set none
*/
public void setAdapter(@Nullable RecyclerView.Adapter adapter) {
recyclerView.setAdapter(adapter);
if (adapter instanceof FastScroller.SectionIndexer) {
fastScroller.setSectionIndexer((FastScroller.SectionIndexer) adapter);
} else if (adapter == null) {
fastScroller.setSectionIndexer(null);
}
}
/**
* Installs the event bridge for on the supplied adapter/helper.
*
* @param adapter
* @param selectionTracker
* @param keyProvider
*
* @param <K> Selection key type. @see {@link StorageStrategy} for supported types.
*/
public static <K> void install(
@NonNull RecyclerView.Adapter<?> adapter,
@NonNull SelectionTracker<K> selectionTracker,
@NonNull ItemKeyProvider<K> keyProvider) {
// setup bridges to relay selection and adapter events
new TrackerToAdapterBridge<>(selectionTracker, keyProvider, adapter);
adapter.registerAdapterDataObserver(selectionTracker.getAdapterDataObserver());
}
@Nullable
protected BaseStickyDecoration provideStickyDecoration(@NonNull RecyclerView.Adapter adapter, @Nullable StickyAdapter stickyAdapter) {
if (stickyAdapter == null) return null;
switch (mStickyMode) {
case StickyAdapter.Mode.MIDDLE:
return new MiddleStickyDecoration(stickyAdapter);
case StickyAdapter.Mode.HEADER:
default:
return new HeaderStickyDecoration(stickyAdapter);
}
}
/**
* This method tests the adapter to make sure that it implements the needed interface.
*
* @param adapter The adapter of the attached {@link RecyclerView}.
*/
void testAdapter(RecyclerView.Adapter adapter) {
if (adapter == null) {
Log.e("MaterialScrollBarLib", "The adapter for your recyclerView has not been set; " +
"skipping indicator layout.");
return;
}
if(!adapterClass.isInstance(adapter)) {
throw new IllegalArgumentException(
"In order to add this indicator, the adapter for your recyclerView, "
+ adapter.getClass().getName()
+ ", MUST implement " + Utils.getGenericName(this) + ".");
}
}
@Override
public final <VH extends RecyclerView.ViewHolder> void setSingleChoiceItems(
@Nullable final RecyclerView.Adapter<VH> adapter,
@Nullable final RecyclerView.LayoutManager layoutManager, final int checkedItem,
@Nullable final OnClickListener listener) {
decorator.setSingleChoiceItems(adapter, layoutManager, checkedItem, listener);
}
public static void setMediaSize(RecyclerView recyclerView, int mediaSize) {
RecyclerView.Adapter adapter = recyclerView.getAdapter();
if (adapter instanceof MediaAdapter) {
((MediaAdapter) adapter).setMediaSize(mediaSize);
}
}
public void onItemClick(
@NonNull final RecyclerView.Adapter<?> parent,
@NonNull final View view,
final int position, @Nullable final T item);
@Override
public void onAdapterChanged(RecyclerView.Adapter oldAdapter, RecyclerView.Adapter newAdapter) {
heights.clear();
calcLastItemHeight();
super.onAdapterChanged(oldAdapter, newAdapter);
}
public void setAdapter(RecyclerView.Adapter adapter) {
mRvList.setAdapter(adapter);
}
public void onItemClick(@NonNull RecyclerView.Adapter<?> parent,
@NonNull View view, @NonNull final DocumentFile item);
public boolean onItemLongClick(@NonNull RecyclerView.Adapter<?> parent,
@NonNull View view, @NonNull final DocumentFile item);
public int getItemCount() {
RecyclerView.Adapter adapter = getAdapter();
return adapter == null ? 0 : adapter.getItemCount();
}
public ClickWrapper(RecyclerView.Adapter<RecyclerView.ViewHolder> adapter) {
this.mAdapter = adapter;
}
@Override
protected RecyclerView.Adapter createAdapter() {
return new FavouritesAdapter(getActivity(), HostManager.getInstance(getActivity()));
}