[英]Snackbar in recyclerview
如何在頁面底部顯示小吃店? 我想在點擊喜歡時顯示小吃店。 我在recycleview(crdLayout)的一個項目中使用了snackbar,所以它已經顯示在每個項目的底部,這里是代碼:
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
itemHolder.like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar snackbar = Snackbar
.make(itemHolder.crdLayout, "liked", Snackbar.LENGTH_LONG)
snackbar1.show();
}
});
小吃欄每次都不會在頁面底部彈出,而是出現在每個卡片視圖的底部
在您的Snackbar
,您將參數指定為itemholder.cardLayout
。 因此,小吃欄將出現在卡片布局下方。 您應該提供頁面的根視圖以使其顯示在頁面底部
有兩種方法可以實現這一點。 一種是在RecyclerViewAdapter
類的構造函數中傳遞rootview
並將參數傳遞給Snackbar
。 另一種方法是在Activity
或Fragment
類中使用回調方法來調用RecyclerViewAdapter
類。
對於第一種方法,您只需將頁面的rootView
作為構造函數參數傳遞並在Snackbar
傳遞參數。
對於第二種方法,您可以在RecyclerViewAdapter
類中創建一個接口,將接口實例作為參數傳遞給構造函數,在接口中創建一個方法並在項目被點擊時通知該方法。 然后,您可以在Activity
類本身中顯示Snackbar
。 看下面的代碼,
public class YourActivity implements RecyclerViewAdapter.CallbackListener{
View rootView;
@Override
protected void onCreate(Bundle savedInstanceState){
//
rootView = findViewById(R.id.my_root_view);
//
//
RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(this);
//
//
}
@Override
public void onItemClicked(){
Snackbar snackbar = Snackbar.make(rootView, "liked", Snackbar.LENGTH_LONG);
snackbar.show();
}
}
你的 RecyclerViewAdapter 類將是,
public class RecyclerViewAdapter {
CallbackListener listener;
public RecyclerViewAdapter (CallbackListener listener){
this.listener = listener;
}
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
itemHolder.like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listener.onItemClicked();
}
});
public interface CallbackListener{
void onItemClicked();
}
}
雖然第一種方法非常簡單,但第二種方法為您提供了更多的封裝、更清晰的代碼和對代碼的更多控制。
Activity
布局中設置CoordinatorLayout
。CoordinatorLayout
作為Snackbar.make()
命令的第一個參數傳遞。因此,最終它應該是這樣的:
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
itemHolder.like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final View my_new_view = findViewById(R.id.myCoordinatorLayout); //define your CoordinatorLayout
Snackbar snackbar = Snackbar
.make(myCoordinatorLayout, "liked", Snackbar.LENGTH_LONG); //set CoordinatorLayout as first argument
snackbar1.show();
}
});
您的Snackbar
顯示在CoordinatorLayout
的底部。
如果您嘗試在整個屏幕上顯示 Snackbar,請不要將父Activity/Fragment
View/ViewGroup/Layout
傳遞給 Adapter。
而是將Callback/Listener
從Activity/Fragment
傳遞給 RecyclerView Adapter
。 這樣當項目被點擊時,你會觸發回調。 偵聽該回調的Activity/Fragment
將被觸發,您現在可以顯示 Snackbar/Toast/CustomView...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.