(Rest Api)Recycler View,其中包含接受和拒绝Android中每行中的请求按钮 [英] (Rest Api) Recycler View with Accept and Decline a request Buttons in each Row in android
问题描述
我正在开发基于Rest Api远程数据的android应用程序,在其中我制作了一个 RecyclerView
.我在 RecyclerView
中的每一行中添加了2个按钮.这两个按钮是接受"和拒绝".当用户选择接受按钮时, JSON
属性的某些部分必须更改为True,如果选择拒绝按钮,则必须将 JSON
属性的某些部分更改为false和@POST
.我该怎么办?
I am developing an android application based on Rest Api remote data, in which I have made one RecyclerView
. I have added 2 buttons with each row in RecyclerView
. These 2 buttons are Accept and Decline. When user selects accept button certain portion of the JSON
Property have to change to True and if selects decline button certain portion of the JSON
Property have to change to false and @POST
it. How can I do it?
我是使用 RecyclerView
的Rest Api的新手,所以如果您知道该解决方案,请提供帮助,谢谢.
I’m new in Rest Api with RecyclerView
, so if you know the solution please help, thanks.
我到目前为止所做的事情:
我的主要活动:
public class ViewRefundRequest extends AppCompatActivity{
private RecyclerView viewRefundRequestRecylcerView;
private RecyclerView.LayoutManager layoutManager;
private AdminViewRefundRequestAdapter adapter;
List<ViewRefundRequestModel> vrrList;
RelativeLayout vrrMainLayout;
AdminViewRefundRequestAdapter.RecyclerViewClickListener listener;
ProgressBar progressBarVRR;
ApiService serviceVRR;
TokenManager tokenManagerVrr;
Call<List<ViewRefundRequestModel>> callViewRefundRequestData;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_refund_request);
tokenManagerVrr = TokenManager.getInstance(getSharedPreferences("prefs", MODE_PRIVATE));
serviceVRR = RetrofitBuilder.createServiceWithAuth(ApiService.class, tokenManagerVrr);
progressBarVRR = (ProgressBar) findViewById(R.id.viewRefundRequestProgressBar);
viewRefundRequestRecylcerView = (RecyclerView) findViewById(R.id.viewRefundRequestRecylcerView);
layoutManager = new LinearLayoutManager(this);
viewRefundRequestRecylcerView.setLayoutManager(layoutManager);
listener = new AdminViewRefundRequestAdapter.RecyclerViewClickListener() {
@Override
public void onRowClick(View view, int position) {
}
@Override
public void onButtonYesClick(View view, int position) {
int acceptStatusCode = 110;
final int id = vrrList.get(position).getId();
//final int statusCode = vrrList.get(position).getRefundStatus();
acceptRequest(id, acceptStatusCode);
adapter.notifyDataSetChanged();
}
@Override
public void onButtonNoClick(View view, int position) {
}
};
//Rest Api call
allViewRefundRequestData();
}
private void allViewRefundRequestData() {
progressBarVRR.setVisibility(View.VISIBLE);
callViewRefundRequestData = serviceVRR.getAllViewRefundRequest();
callViewRefundRequestData.enqueue(new Callback<List<ViewRefundRequestModel>>() {
@Override
public void onResponse(@NotNull Call<List<ViewRefundRequestModel>> call, @NotNull Response<List<ViewRefundRequestModel>> response) {
progressBarVRR.setVisibility(View.GONE);
if (response.isSuccessful() && response.body() != null){
vrrList = response.body();
adapter = new AdminViewRefundRequestAdapter(vrrList, ViewRefundRequest.this, listener);
viewRefundRequestRecylcerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}else {
if (response.code() == 401) {
startActivity(new Intent(ViewRefundRequest.this, LoginActivity.class));
finish();
tokenManagerVrr.deleteToken();
Toast.makeText(ViewRefundRequest.this, "User session expired, Login again", Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onFailure(@NotNull Call<List<ViewRefundRequestModel>> call, @NotNull Throwable t) {
progressBarVRR.setVisibility(View.GONE);
Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Network Status: " + t.getMessage(), Snackbar.LENGTH_LONG);
View snackbarView = snackbar.getView();
snackbarView.setBackgroundColor(Color.parseColor("#f5003d"));
TextView tv = (TextView) snackbarView.findViewById(R.id.snackbar_text);
tv.setTextColor(Color.WHITE);
snackbar.show();
}
});
}
public void acceptRequest(final int id, final int statusCode){
Call<ViewRefundRequestModel> callAccepted = serviceVRR.acceptRefundRequest(id, statusCode);
callAccepted.enqueue(new Callback<ViewRefundRequestModel>() {
@Override
public void onResponse(Call<ViewRefundRequestModel> call, Response<ViewRefundRequestModel> response) {
Snackbar snackbar = Snackbar.make(vrrMainLayout, "Accepted", Snackbar.LENGTH_SHORT);
View snackbarView = snackbar.getView();
snackbarView.setBackgroundColor(Color.parseColor("#5ec639"));
TextView tv = (TextView) snackbarView.findViewById(R.id.snackbar_text);
tv.setTextSize(16);
tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
tv.setTypeface(tv.getTypeface(), Typeface.BOLD);
tv.setTextColor(Color.WHITE);
snackbar.show();
}
@Override
public void onFailure(Call<ViewRefundRequestModel> call, Throwable t) {
}
});
}
public void declineRequest(final int id, Integer statusCode, String noteRefund){
Call<ViewRefundRequestModel> callDeclined = serviceVRR.cancelRefundRequest(id, statusCode, noteRefund);
callDeclined.enqueue(new Callback<ViewRefundRequestModel>() {
@Override
public void onResponse(Call<ViewRefundRequestModel> call, Response<ViewRefundRequestModel> response) {
}
@Override
public void onFailure(Call<ViewRefundRequestModel> call, Throwable t) {
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (callViewRefundRequestData != null) {
callViewRefundRequestData.cancel();
callViewRefundRequestData = null;
}
}
}
我的适配器类:
public class AdminViewRefundRequestAdapter extends BaseAdapter {
private List<ViewRefundRequestModel> viewRefundRequestModels;
List<ViewRefundRequestModel> viewRefundRequestModels;
private Context context;
private RecyclerViewClickListener mListener;
public AdminViewRefundRequestAdapter(List<ViewRefundRequestModel> viewRefundRequestModels, Context context, RecyclerViewClickListener listener) {
this.viewRefundRequestModels = viewRefundRequestModels;
this.context = context;
this.mListener = listener;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.model_view_refund_reques, parent, false);
return new MyViewHolder(view, mListener);
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
final ViewRefundRequestModel thisModelResponse = viewRefundRequestModels.get(position);
Patient patient = thisModelResponse.getPatient();
String patientName= patient.getFirstName()+" "+patient.getLastName();
Item item =thisModelResponse.getItem();
String itemName= item.getName();
ItemCategory itemCategory = item.getItemCategory();
String itemCategoryName = itemCategory.getName();
holder.patient_name.setText(patientName);
holder.patient_id.setText(Integer.toString(thisModelResponse.getPatientID()));
holder.item_name.setText(itemName);
holder.category.setText(itemCategoryName);
holder.quantity.setText(Integer.toString(thisModelResponse.getServiceQuantity()));
holder.amount.setText(Double.toString(thisModelResponse.getServiceActualPrice()));
holder.discount.setText(Double.toString(thisModelResponse.getDiscount()));
holder.amount_after_discount.setText(Double.toString(thisModelResponse.getServiceListPrice()));
holder.refund_note.setText(thisModelResponse.getRefundNote());
}
@Override
public int getItemCount() {
return viewRefundRequestModels.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private RecyclerViewClickListener mListener;
private TextView patient_name, patient_id, item_name,
category, quantity, amount, discount, amount_after_discount, refund_note;
private Button make_decisionBtn_Yes, make_decisionBtn_No;
private RelativeLayout row_container_vrr;
public MyViewHolder(@NonNull View itemView, RecyclerViewClickListener listener) {
super(itemView);
patient_name = itemView.findViewById(R.id.patient_name_VRR_Model);
patient_id = itemView.findViewById(R.id.patient_id_VRR_Model);
item_name = itemView.findViewById(R.id.item_name_VRR_Model);
category = itemView.findViewById(R.id.category_VRR_Model);
quantity = itemView.findViewById(R.id.quantity_VRR_Model);
amount = itemView.findViewById(R.id.amount_VRR_Model);
discount = itemView.findViewById(R.id.discount_VRR_Model);
amount_after_discount = itemView.findViewById(R.id.amount_after_discount_VRR_Model);
refund_note = itemView.findViewById(R.id.refund_note_VRR_Model);
make_decisionBtn_Yes = itemView.findViewById(R.id.make_decisionBtn01_VRR_Model);
make_decisionBtn_No = itemView.findViewById(R.id.make_decisionBtn02_VRR_Model);
row_container_vrr = itemView.findViewById(R.id.row_container_vrr);
mListener = listener;
row_container_vrr.setOnClickListener(this);
make_decisionBtn_Yes.setOnClickListener(this);
make_decisionBtn_No.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.row_container_vrr:
mListener.onRowClick(row_container_vrr, getAdapterPosition());
break;
case R.id.make_decisionBtn01_VRR_Model:
mListener.onButtonYesClick(make_decisionBtn_Yes, getAdapterPosition());
break;
case R.id.make_decisionBtn02_VRR_Model:
mListener.onButtonNoClick(make_decisionBtn_No, getAdapterPosition());
break;
default:
break;
}
}
}
public interface RecyclerViewClickListener {
void onRowClick(View view, int position);
void onButtonYesClick(View view, int position);
void onButtonNoClick(View view, int position);
}
}
我哪里出错了?
还是应该采用另一种方法?
Or should I follow another approach?
如果必须的话,那是什么?
If I have to then what is it?
推荐答案
您可以像这样先创建一个Pojo类,例如
You can do like this first create a Pojo class like
class SendDataModel{
private String email;
private Name name;
private String password;
public String getEmail ()
{
return email;
}
public void setEmail (String email)
{
this.email = email;
}
public Name getName ()
{
return name;
}
public void setName (Name name)
{
this.name = name;
}
public String getPassword ()
{
return password;
}
public void setPassword (String password)
{
this.password = password;
}
@Override
public String toString()
{
return "ClassPojo [email = "+email+", name = "+name+", password = "+password+"]";
}
}
和其他类似Pojo的课程
and other Pojo Class like
class Name{
private String lastName;
private String firstName;
public String getLastName ()
{
return lastName;
}
public void setLastName (String lastName)
{
this.lastName = lastName;
}
public String getFirstName ()
{
return firstName;
}
public void setFirstName (String firstName)
{
this.firstName = firstName;
}
@Override
public String toString()
{
return "ClassPojo [lastName = "+lastName+", firstName = "+firstName+"]";
}
}
并设置您的名字和姓氏
Name name = new Name();
name.setFirstName();
name.setLastName();
SendDataModel sendDatamodel=new SendDataModel();
sendDatamodel.setName(name);
sendDatamodel.setEmail("yourEmail")
sendDatamodel.setPassword("yourPassword");
并将您的sendDatamodel传递给您的请求.
and pass your sendDatamodel to your request.
Call<RegisterResponseModel> res = apiService.register(sendDatamodel);
res.enqueue(new Callback<RegisterResponseModel>() {
@Override
public void onResponse(Call<RegisterResponseModel> call,
Response<RegisterResponseModel> response) {
}
@Override
public void onFailure(Call<RegisterResponseModel> call, Throwable t)
{
// Log error here since request failed
Log.e(TAG, t.toString());
}
});
这篇关于(Rest Api)Recycler View,其中包含接受和拒绝Android中每行中的请求按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!