gpt4 book ai didi

java - 当TAB 1的RecyclerView中添加数据时更新TAB 2 Recyclerview

转载 作者:行者123 更新时间:2023-12-02 11:07:36 25 4
gpt4 key购买 nike

我有一种待办事项应用程序。在个人资料 Activity 中,有 2 个选项卡。待办事项完成。在选项卡 1 中,用户可以检查其“待办事项”是否“已完成”。在本例中,我想更新 TAB 2 的 recyclerview。

我尝试了几种方法,但没有成功。这是 TAB 1 代码,它与 TAB 2 几乎相同。

TAB 1 类

公共(public)类 Tab_Profile_1 扩展 Fragment {

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 适配器

公共(public)类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();
}

}

最佳答案

如果我没看错的话,您有两个选项卡和一个存储待办事项及其状态的后端数据库?要更新第二个列表,您只需执行与第一个列表中相同的操作,然后更新适配器的数据集并通知数据集已更改。如何在第二个选项卡中触发此操作才是真正的问题。

您可以使用接口(interface)并让适配器通知您的 Activity 回收器 View 1 对其进行了操作,然后您可以告诉适配器 2 更新其数据。您可以传回数据并仅通知一行,也可以通知整个数据集。如果您基于所有服务执行此操作,则只需从服务重新加载回收器 View ,它将包含新数据。

我认为您需要弄清楚的是如何通知选项卡 2 它需要更新其数据。我的建议是:

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

然后在你的适配器内部有一个带有 getter/setter 的属性,例如:

private AdapterInterface adapterInterfaceListener;

在 Fragment/Activity 中实现 AdapterInterface 并实现 itemCompleted 函数。

然后将你的adapter.setAdapterInterfaceLisetener 设置为你实现的那个函数。然后,在您的适配器中,当用户单击支票簿将其标记为完成时,您可以调用adapterInterfaceListener.itemCompleted() 函数,它会将该信息发送到您的 fragment/Activity 。从那里您可以将新数据提供给适配器2,或者调用API,但是您想获取新数据。

这有帮助吗?

关于java - 当TAB 1的RecyclerView中添加数据时更新TAB 2 Recyclerview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50843157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com