覆盖适配器中的 Activity onbackpressed 方法
Override Activity onbackpressed method in Adapter
我已经在我的应用程序中实现了 'BottomSheet'。在我的自定义适配器中调用其行为方法。现在我想在按下后退按钮时折叠或隐藏 'BottomSheet'。为此,我如何重写适配器中的 'onbackpressed' 方法来实现它。
这是我的适配器。
public class CustomAdapter extends RecyclerView.Adapter<ViewHolder> {
LinearLayout bottom_sheet;
CoordinatorLayout mainLayout;
private BottomSheetBehavior mBottomSheetBehavior;
public CustomAdapter(Context context, ArrayList<Post> posts,LinearLayout bottom_sheet,CoordinatorLayout mainLayout) {
this.posts = posts;
this.context = context;
this.bottom_sheet=bottom_sheet;
this.mainLayout=mainLayout;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_layout, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
mBottomSheetBehavior = BottomSheetBehavior.from(bottom_sheet);
mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
switch (newState) {
case BottomSheetBehavior.STATE_HIDDEN:
break;
case BottomSheetBehavior.STATE_EXPANDED: {
}
break;
case BottomSheetBehavior.STATE_COLLAPSED: {
}
break;
case BottomSheetBehavior.STATE_DRAGGING:
break;
case BottomSheetBehavior.STATE_SETTLING:
break;
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
holder.comment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
} else {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}
});
}
@Override
public int getItemCount() {
return posts.size();
}
}
你不能。
简单的方法是在 activity 中覆盖 activity 中的 onBackPressed()。
或者让你的东西打开一个对话框。或上下文。或制作自定义视图并覆盖 onKeyDown(int keyCode, KeyEvent event)。或者在 bottom_sheet 上使用 setOnKeyListener(View.OnKeyListener l)。 docs link。对于要使用的按键,您应该 return 为真,但是我不能保证这对现在的系统键确实有效。
mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
if(mBottomSheetBehavior.getState() !=
BottomSheetBehavior
.STATE_EXPANDED) {
super.onBackPressed();
}
else {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
将此代码放入您的 activity
的 onBackPressed
我已经在我的应用程序中实现了 'BottomSheet'。在我的自定义适配器中调用其行为方法。现在我想在按下后退按钮时折叠或隐藏 'BottomSheet'。为此,我如何重写适配器中的 'onbackpressed' 方法来实现它。
这是我的适配器。
public class CustomAdapter extends RecyclerView.Adapter<ViewHolder> {
LinearLayout bottom_sheet;
CoordinatorLayout mainLayout;
private BottomSheetBehavior mBottomSheetBehavior;
public CustomAdapter(Context context, ArrayList<Post> posts,LinearLayout bottom_sheet,CoordinatorLayout mainLayout) {
this.posts = posts;
this.context = context;
this.bottom_sheet=bottom_sheet;
this.mainLayout=mainLayout;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_layout, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
mBottomSheetBehavior = BottomSheetBehavior.from(bottom_sheet);
mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
switch (newState) {
case BottomSheetBehavior.STATE_HIDDEN:
break;
case BottomSheetBehavior.STATE_EXPANDED: {
}
break;
case BottomSheetBehavior.STATE_COLLAPSED: {
}
break;
case BottomSheetBehavior.STATE_DRAGGING:
break;
case BottomSheetBehavior.STATE_SETTLING:
break;
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
holder.comment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
} else {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}
});
}
@Override
public int getItemCount() {
return posts.size();
}
}
你不能。
简单的方法是在 activity 中覆盖 activity 中的 onBackPressed()。
或者让你的东西打开一个对话框。或上下文。或制作自定义视图并覆盖 onKeyDown(int keyCode, KeyEvent event)。或者在 bottom_sheet 上使用 setOnKeyListener(View.OnKeyListener l)。 docs link。对于要使用的按键,您应该 return 为真,但是我不能保证这对现在的系统键确实有效。
mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
if(mBottomSheetBehavior.getState() !=
BottomSheetBehavior
.STATE_EXPANDED) {
super.onBackPressed();
}
else {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
将此代码放入您的 activity
的onBackPressed