![](/img/trans.png)
[英]How to refresh recyclerview adapter when data changes in other fragment?
[英]How to refresh recyclerview adapter from other recyclerview adapter in same fragment
我在一個片段(抽屜活動)中有 Recyclerview 類別和 Recyclerview 產品。 當我單擊類別中的某些內容時,我想重新加載/刷新 recyclerview 產品。
回收商查看類別
...
@Override
public transaksibaru_kategori_viewholder onCreateViewHolder(final ViewGroup parent, int viewType) {
View view;
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rv_item_transaksibaru_kategori, parent, false);
final transaksibaru_kategori_viewholder vHolder = new transaksibaru_kategori_viewholder(view);
sharedPrefManager = new SharedPrefManager(parent.getContext());
Activity_transaksibaru.KEY_ACT = "run";
vHolder.linearlayout_kategori.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String id_kategori = mItem_kategori.get(vHolder.getAdapterPosition()).getId();
sharedPrefManager.savetransaksibarustring(SharedPrefManager.sp_idkategori,id_kategori);
Toast.makeText(parent.getContext(), "ID KATEGORI = " + id_kategori,Toast.LENGTH_LONG).show();
}
});
return vHolder;
}
...
分段
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
...
statusview = sharedPrefManager.getSp_viewmode();
statushitung = Integer.valueOf(statusview);
id_kategori = sharedPrefManager.getSp_idkategori();
//id_kategori = "10";
if (statushitung%2 == 0){
call_itembarang_gridview();
i=1;
}else {
call_itembarang();
i=2;
}
...
我只需要從 RV_category(RV2) 運行 call_itembarang() 它一定很簡單,但我不知道該怎么做
解決您的問題的簡單方法是:
將 loadCategory(int categoryId) 方法添加到 SharedPrefManager。
public void loadCategory(int categoryId) { // you need to create getProductsOfCategory method in SharedPrefManager. List<Product> products = getProductsOfCategory(categoryId); // you need to create setProductList method in productsAdapter productsAdapter.setProductList(products); productsAdapter.notifyDatasetChanged(); }
在類別的 RecyclerView 中,在 onCreateViewHolder 方法中更改您的 onClickListener 以便它使用 loadCategory 方法。
所以這是適配器必須與片段通信的情況。
我們將為此使用一個接口:
1)在新文件中創建接口
public interface onCategoryClickedListener{
void onCategoryClicked(String categoryId);
}
2) 適配器
public class YourAdapter extends ......{
private onCategoryClickedListener listener;
//method to set listener
public void setOnCategoryClickedListener(onCategoryClickedListener listener){
this.listener=listener;
}
//oncreateviewholder
@Override
public transaksibaru_kategori_viewholder onCreateViewHolder(final ViewGroup parent, int viewType) {
......
vHolder.linearlayout_kategori.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//your category id
final String id_kategori = mItem_kategori.get(vHolder.getAdapterPosition()).getId();
//send the category id back to your fragment
listner.onCategoryClicked(id_kategori);
}
});
}
3)現在讓你的片段實現這個接口
public class YourFragment extends Fragment implements onCategoryClickedListener{
private RecyclerView mRecyclerView;
private YourAdapter adapter;
.....
.....
.....
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
.......
//here you pass the listener to your adapter
adapter.setOnCategoryClickedListener(this);
........
return(view);
}
@Override
public void onCategoryClicked(String categoryId){
//this will be called every time an item in your category is clicked
//call the method from here and whatever if statements you want
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.