I want to change the contents of the list in the bottom sheet, although the click event, but I received only an empty sheet. Here is a demo version modified from BottomSheetSample (github.com/niravkalola/BottomSheetSample).
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) {
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); } }
Here is the capture after clicking the browse button for the first and second time: first click second click
java android adapter android-recyclerview bottom-sheet
J zheng
source share