- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想通过单击事件更改 Bottom Sheet View 中的列表内容,但我只有空白工作表。这是一个从BottomSheetSample(github.com/niravkalola/BottomSheetSample)修改而来的demo。
mainActivity.java
package com.nkdroid.bottomsheetsample;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomSheetBehavior;
import android.support.design.widget.BottomSheetDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MainActivity extends AppCompatActivity implements ItemAdapter.ItemListener {
private Button btnView, btnDialog;
BottomSheetBehavior behavior;
private BottomSheetDialog mBottomSheetDialog;
private ItemAdapter mAdapter;
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnView = (Button) findViewById(R.id.btnView);
btnDialog = (Button) findViewById(R.id.btnDialog);
btnView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAdapter = new ItemAdapter(createItems());
recyclerView.setAdapter(mAdapter);
behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
btnDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showBottomSheetDialog();
}
});
View bottomSheet = findViewById(R.id.bottom_sheet);
behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
// React to state change
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// React to dragging events
}
});
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new ItemAdapter(createItems(), this);
recyclerView.setAdapter(mAdapter);
}
private void showBottomSheetDialog() {
if (behavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
mBottomSheetDialog = new BottomSheetDialog(this);
View view = getLayoutInflater().inflate(R.layout.sheet, null);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new ItemAdapter(createItems(), new ItemAdapter.ItemListener() {
@Override
public void onItemClick(Item item) {
if (mBottomSheetDialog != null) {
mBottomSheetDialog.dismiss();
}
}
}));
mBottomSheetDialog.setContentView(view);
mBottomSheetDialog.show();
mBottomSheetDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
mBottomSheetDialog = null;
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
mAdapter.setListener(null);
}
public List<Item> createItems() {
Random r = new Random();
ArrayList<Item> items = new ArrayList<>();
items.add(new Item(R.mipmap.ic_launcher, "Item 1"+ r.nextInt(100)));
items.add(new Item(R.mipmap.ic_launcher, "Item 2"));
items.add(new Item(R.mipmap.ic_launcher, "Item 3"));
items.add(new Item(R.mipmap.ic_launcher, "Item 4"));
return items;
}
@Override
public void onItemClick(Item item) {
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}
ItemAdapter.java:
package com.nkdroid.bottomsheetsample;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder> {
private List<Item> mItems;
private ItemListener mListener;
public ItemAdapter(List<Item> items, ItemListener listener) {
mItems = items;
mListener = listener;
}
public ItemAdapter(List<Item> items) {
mItems = items;
}
public void setListener(ItemListener listener) {
mListener = listener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.adapter, parent, false));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.setData(mItems.get(position));
}
@Override
public int getItemCount() {
return mItems.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public ImageView imageView;
public TextView textView;
public Item item;
public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
imageView = (ImageView) itemView.findViewById(R.id.imageView);
textView = (TextView) itemView.findViewById(R.id.textView);
}
public void setData(Item item) {
this.item = item;
imageView.setImageResource(item.getDrawableResource());
textView.setText(item.getTitle());
}
@Override
public void onClick(View v) {
if (mListener != null) {
mListener.onItemClick(item);
}
}
}
public interface ItemListener {
void onItemClick(Item item);
}
}
这是第一次和第二次单击show view 按钮后的捕获: first click second click
最佳答案
这在 24.0.0 中已修复,即 recyclerView 已更新。但是,如果您在 bottomsheet 和 recyclerview 上使用 wrap_content,则必须使用它,以便正确计算 bottomsheet 高度。
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if(newState==BottomSheetBehavior.STATE_EXPANDED){
bottomSheet.requestLayout();
/*or
recyclerView.scrollToPosition(0);
recyclerView.requestLayout();*/
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
如果您想使用早期版本,请使用
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if(newState==BottomSheetBehavior.STATE_EXPANDED){
bottomSheet.requestLayout();
bottomSheet.invalidate();
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
关于java - 在 Bottom Sheet 中更新 recyclerview 内容失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36373122/
我是第一次尝试设计网站。我正在尝试在右侧设置一种导航栏,但我无法正确定位它。当我使用边距或填充时,只有边距和填充适用于顶部、右侧和左侧。当我尝试使用 padding-bottom 或 margin-b
这个问题在这里已经有了答案: How can I position my div at the bottom of its container? (25 个答案) 关闭 4 年前。
我有一个垂直的 LinearLayout,它有一个 ListView ,一个 ImageView 在底部,一个在顶部, ListView 填满了留下的空间。 看起来像这样:
https://imgur.com/gallery/xntpREw 有没有人遇到这个问题,或者我做错了什么 更新:我在android 8和9版本上测试了同一个应用程序,但没有出现此故障,因此,这可能特
我将 relativelayout 作为 bottomsheet 行为。在 relativelayout 中,我有 imageview,下面是 recyclerview。现在我想防止用户在 recyc
我在 mi 页面的末尾有这个 navbar-fixed-bottom。 我为 HTML 添加边距底部 html { margin-bottom: 100px } .. 避免页
如何让绝对定位的元素到达页面底部? 我想在我的页面上创建一个“封面”。为了让它覆盖整个页面,我使用了“position: absolute”,四个方向都设置为0。但是,当页面内容的高度大于客户端窗口的
我有一个应该显示日历的 HTML 页面。 有一张图像要显示在日历上方和下方。但是 below(id=bottomCell) 显示不正确(在右边,不在下面)。 你能告诉我如何让底部图片处于正确的位置吗?
对我来说,同时指定 bottom 和 margin-bottom 似乎是矛盾的。因为两者都是指定元素与周围元素/容器之间缩进的方法。也就是说,bottom 应该从边框开始测量,否则它的缩进量是从缩进量
这jsFiddle说明这个问题指的是什么(下面的完整代码)。请注意,即使 #outer-div 应该有 0 个 padding,而 #inner-div 应该有 0 个 margin-bottom,看
我正在尝试完成像 instagram 帖子这样的示例:https://www.instagram.com/p/BXgsKFLBczA/?taken-by=claymicro列表扩展但不会将页脚向下推在
我正在编写一个使用二维数组的程序。用户选择一行和一列;如果至少有一个直接与 N S E 或 W 匹配的元素,则它变为 '.'我一直遇到段错误,因为经过各种测试和解决问题后,我相当确定它陷入了 if t
我正在做一个我第一次使用 scss 的元素。我们有一个主文件,@imports 所有其他文件;这可能还会导入一些其他文件。 编译需要很长时间。人们说这是使用 Sass 时的正常方法。但我怀疑采用相反的
我使用 windbg 在我的 Windows 10 机器上运行一个程序,并让它在初始断点处中断。我获取堆栈的物理底部地址(TEB 的 stackBase),并减去 ntdll!LdrInitializ
我有一个 Bottom Sheet ,我正在加载弹出窗口,但它没有显示在 Bottom Sheet 中。该弹出窗口显示在 Bottom Sheet 格的后面 CustomTextView te
我有一个带有垂直堆栈 View 的 UIScrollView,它有一个标签和一个按钮,我希望按钮停留在屏幕底部,一旦标签的文本增加并到达按钮,按钮将保留在标签下方,并且它们一起滚动。 我在想: let
我在 Android 中创建了一个 View ,我需要从下到上对其进行动画处理,反之亦然。当我单击 ImageView 时,我需要从下到上为完整的 RelativeLayout 设置动画,并且它成功了
我在react native 应用程序中使用react-native-raw-bottom-sheet,打开 Bottom Sheet 时黑色透明 View 。 最佳答案 关于react-nativ
My blog的弹出帖子设置为底部:0;但是当 div 实际上位于底部时,div 中的内容不会移动......有什么想法吗? 最佳答案 看起来你在 javascript 中设置了顶部位置,它覆盖了你的
我在 Google 和此处进行了一些搜索,但找不到适合我的问题的解决方案。我已经完成了网站设计,但忘记包含社交媒体链接。为了解决这个问题,我决定将图标放在页面底部。问题是当内容没有填满整个页面时,图标
我是一名优秀的程序员,十分优秀!