簡體   English   中英

在TAB 1的RecyclerView中添加數據時更新TAB 2 Recyclerview

[英]Update TAB 2 Recyclerview When Data Added in TAB 1's RecyclerView

我有一種to-do app 在個人資料活動中,有2個標簽。 To-doDone 在選項卡1中,用戶可以檢查其“待辦事項”為“完成”。 在這種情況下,我想更新TAB 2的recyclerview。

我嘗試了幾件事,但沒有成功。 這是TAB 1代碼,與TAB 2幾乎相同。

TAB 1類

公共類Tab_Profile_1擴展了片段{

private RecyclerView recyclerView_tab_todo;
private List<Model_ListItem> itemList;
private Adapter_Profile_ToDo adapter_profile_toDo;
SharedPreferences mSharedPref;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_profile_tab_1, container, false);

    //TO-DO

    //
    recyclerView_tab_todo = view.findViewById(R.id.recyclerView_tab_todo);
    //
    fetchUserToDo();


    return view;
}

public void fetchUserToDo() {

    itemList = new ArrayList<>();

    //First Settings
    mSharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
    String session_user_id = mSharedPref.getString("session_user_id", "");

    API_Service api_service = Client.getRetrofitInstance().create(API_Service.class);

   Call<List<Model_ListItem>> call = api_service.fetchUserToDo(session_user_id);

   call.enqueue(new Callback<List<Model_ListItem>>() {
       @Override
       public void onResponse(Call<List<Model_ListItem>> call, Response<List<Model_ListItem>> response) {

           itemList = response.body();

           adapter_profile_toDo = new Adapter_Profile_ToDo(getContext(), itemList);
           recyclerView_tab_todo.setHasFixedSize(true);
           LinearLayoutManager layoutManager
                   = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
           recyclerView_tab_todo.setLayoutManager(layoutManager);
           recyclerView_tab_todo.setAdapter(adapter_profile_toDo);



       }

       @Override
       public void onFailure(Call<List<Model_ListItem>> call, Throwable t) {

       }
   });
}}

TAB 1 RecyclerView適配器

公共類Adapter_Profile_ToDo擴展了RecyclerView.Adapter {

private Context context;
private List<Model_ListItem> itemList;
private String url_extension_images = URL_Extension.url_extension_images;
SharedPreferences mSharedPref;
ProgressDialog progressDialog;
View view;

public Adapter_Profile_ToDo(Context context, List<Model_ListItem> itemList) {
    this.context = context;
    this.itemList = itemList;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_profile_todo, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {

    Glide.with(context).load(url_extension_images + itemList.get(position).getItem_image()).into(holder.imageView_profile_todo);
    holder.textView_profile_todo_name.setText(itemList.get(position).getItem_name());
    holder.textView_profile_todo_desc.setText(itemList.get(position).getItem_description());

    holder.layout_profile_todo_detail.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //detail
        }
    });

    holder.layout_profile_todo_add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            final AlertDialog.Builder builder = new AlertDialog.Builder(view.getRootView().getContext(), R.style.AlertStyle);
            builder.setTitle("\"" + itemList.get(position).getItem_name() + "\"" + "\n");
            builder.setIcon(R.drawable.ic_bookmark);

            builder.setPositiveButton("YAPTIM", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    showProgressDialog();
                    addDone("" + itemList.get(position).getItem_id(), position);
                }
            });

            builder.setNegativeButton("SİL", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    showProgressDialog();
                    deleteUserToDo("" + itemList.get(position).getItem_id(), position);
                }
            });

            builder.setNeutralButton("İptal", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });

            builder.show();
        }
    });

}

@Override
public int getItemCount() {
    return itemList.size();
}


public class ViewHolder extends RecyclerView.ViewHolder {

    ImageView imageView_profile_todo;
    TextView textView_profile_todo_name, textView_profile_todo_desc;
    LinearLayout layout_profile_todo_detail, layout_profile_todo_add;

    public ViewHolder(View itemView) {
        super(itemView);

        imageView_profile_todo = itemView.findViewById(R.id.imageView_profile_todo);
        textView_profile_todo_name = itemView.findViewById(R.id.textView_profile_todo_name);
        textView_profile_todo_desc = itemView.findViewById(R.id.textView_profile_todo_desc);
        layout_profile_todo_detail = itemView.findViewById(R.id.layout_profile_todo_detail);
        layout_profile_todo_add = itemView.findViewById(R.id.layout_profile_todo_add);
    }
}

public void deleteUserToDo(final String listId, final int clicked) {
    mSharedPref = PreferenceManager.getDefaultSharedPreferences(context);
    String session_user_id = mSharedPref.getString("session_user_id", "");

    API_Service api_service = Client.getRetrofitInstance().create(API_Service.class);
    Call<Response_Success> call = api_service.deleteUserToDo(session_user_id, listId);

    call.enqueue(new Callback<Response_Success>() {
        @Override
        public void onResponse(Call<Response_Success> call, Response<Response_Success> response) {

            if (response.code() == 200) {

                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                    progressDialog = null;
                }

                if (response.body().getSuccess().matches("true")) {
                    Toast.makeText(context, "Silindi!", Toast.LENGTH_SHORT).show();
                    itemList.remove(itemList.get(clicked));
                    notifyItemRemoved(clicked);
                    notifyItemRangeChanged(clicked, itemList.size());
                } else {
                    Toast.makeText(context, "Bilinmeyen bir hata oluştu!", Toast.LENGTH_SHORT).show();
                }

            }


        }

        @Override
        public void onFailure(Call<Response_Success> call, Throwable t) {
            Toast.makeText(context, "Bilinmeyen bir hata oluştu!", Toast.LENGTH_SHORT).show();
        }
    });

}

public void addDone(String listId, final int clicked) {
    mSharedPref = PreferenceManager.getDefaultSharedPreferences(context);
    String session_user_id = mSharedPref.getString("session_user_id", "");

    API_Service apiService = Client.getRetrofitInstance().create(API_Service.class);
    Call<Response_Success> call = apiService.addDone(session_user_id, listId);

    call.enqueue(new Callback<Response_Success>() {
        @Override
        public void onResponse(Call<Response_Success> call, Response<Response_Success> response) {

            if (response.code() == 200) {

                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                    progressDialog = null;
                }

                if (response.body().getSuccess().matches("true")) {
                    Toast.makeText(context, "Eklendi", Toast.LENGTH_SHORT).show();

                    itemList.remove(itemList.get(clicked));
                    notifyItemRemoved(clicked);
                    notifyItemRangeChanged(clicked, itemList.size());


                } else {
                    Toast.makeText(context, "Bilinmeyen bir hata oluştu!", Toast.LENGTH_SHORT).show();
                }

            }

        }

        @Override
        public void onFailure(Call<Response_Success> call, Throwable t) {

        }
    });
}

public void showProgressDialog() {
    progressDialog = new ProgressDialog(view.getRootView().getContext());
    progressDialog.setMessage("Yükleniyor");
    progressDialog.setCancelable(false);
    progressDialog.show();
}

}

如果我正確閱讀此書,則您有兩個選項卡和一個后端數據庫,用於存儲待辦事項及其狀態? 要更新第二個列表,只需執行與第一個列表相同的操作,並更新適配器的數據集並通知數據集已更改。 問題是您如何在第二個選項卡中觸發此操作。

您既可以使用接口,也可以讓適配器通知您的活動“回收者視圖1”對其進行了操作,然后可以告訴適配器2更新其數據。 您可以傳回數據並僅通知一行,也可以通知整個數據集。 如果您要基於所有服務進行操作,則可以從該服務重新加載回收器視圖,它將具有新數據。

我認為您只需要弄清楚如何通知選項卡2它需要更新其數據。 我的建議是:

public interface AdapterInterface
{
    void itemCompleted(Item hereIsTheItemThatNeedsToBeAddedTo2);
}

然后,在適配器內部具有一個帶有getter / setter的屬性,例如:

private AdapterInterface adapterInterfaceListener;

在Fragment / Activity內部,實現AdapterInterface並實現itemCompleted函數。

然后將您的adapter.setAdapterInterfaceLisetener設置為您實現的功能。 然后,當用戶單擊支票簿將其標記為完成時,在適配器內部,可以調用adapterInterfaceListener.itemCompleted()函數,它將把該信息發送到Fragment / Activity。 從那里,您可以將新數據提供給adapter2,或重新調用API,但是要獲取新數據。

這有幫助嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM