回收者视图列表项在列表视图的底部显示重复的几个项目

时间:2018-11-15 06:38:00

标签: java android

我有一个回收列表视图。在这里,我有一个按钮。单击列表视图时显示项目按钮。单击按钮时,我按下了一个api来执行操作。执行操作后,列表底部自动自动重复一项。每当我执行api hit动作时,项目都会添加到列表的底部。就像我执行api hit动作4次一样,每次一次将一项添加到列表的底部。请提供给我解决方案以解决此问题。

下面,我提供适配器类的代码:-

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.VolleyError;
import com.dockedinDoctor.app.R;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import pojo.AvailableTimeSlots;
import pojo.GetBlockedTimings;
import pojo.GetDoctorScheduleDetail;
import utils.Common;
import utils.ItemClickListener;
import utils.NetworkManager;
import utils.NetworkResponseListenerJSONObject;
import utils.SessionManager;
import utils.ShowMessage;

import static utils.Common.createProgressDialog;

   

public class MyScheduleAdapter extends RecyclerView.Adapter<MyScheduleAdapter.ViewHolder> {

    private static final String TAG = "MyScheduleTwoAdapter";
    private ArrayList<GetDoctorScheduleDetail> getDoctorScheduleDetails;
    private ArrayList<GetBlockedTimings> getBlockedTimingses = new ArrayList<>();
    private ArrayList<AvailableTimeSlots> availableTimeSlotses = new ArrayList<>();
    Context context;
    private LayoutInflater inflater = null;
    private int mSelectedItemPosition = -1;
    Activity parentActivity;
    ProgressDialog pd;
    int fk_time_id;
    int fk_schedule_id;
    int fkscheduleid;

    int getFk_schedule_id;
    int block_time_slot_id;
    int time_slot_id;
    String DateofSlot;
    String BlockDateOfSlot;
    int blockid;
    SessionManager manager = new SessionManager();
    int Doc_Id;

    ArrayList<Integer> compare= new ArrayList<Integer>();
    ArrayList<Integer> compare_fk= new ArrayList<Integer>();

    public MyScheduleAdapter(Context context, ArrayList<GetDoctorScheduleDetail> getDoctorScheduleDetails) {
        this.context = context;
        this.getDoctorScheduleDetails = getDoctorScheduleDetails;
        inflater = LayoutInflater.from(context);
      //  setHasStableIds(true);
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.row_item_get_doctor_schedule, parent, false);
        MyScheduleAdapter.ViewHolder holder = new MyScheduleAdapter.ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        final GetDoctorScheduleDetail pojo = getDoctorScheduleDetails.get(position);
        fkscheduleid = pojo.getScheduleId();
        DateofSlot = pojo.getDateOfSlot();

        try {

            Doc_Id = manager.getPreferencesInt(context, "DocId");
            Log.e(TAG, "DOCID" + Doc_Id);
            holder.bindDataWithViewHolder(pojo, position);
            //getting data from availavle timeslots
            holder.tv_time_of_slot.setText(pojo.getAvailableTimeSlots().get(position).getTimeOfSlot());
            time_slot_id = pojo.getAvailableTimeSlots().get(position).getTimeSlotId();
            //want to ge
            block_time_slot_id = pojo.getGetBlockedTimings().get(position).getFkTimeId();
            BlockDateOfSlot = pojo.getGetBlockedTimings().get(position).getBlockDateOfSlot();
            blockid = pojo.getGetBlockedTimings().get(position).getBlockId();
            Log.e(TAG, "values_blockk" + time_slot_id +"     "+ block_time_slot_id);

            compare.add(time_slot_id);//compare is an arraylist using to save Availablearray-->timeslot id
            compare_fk.add(block_time_slot_id);//compare_fk is an arraylist using to save getblocktimeid-->fktime id

            Log.e(TAG, "compare" + compare);
            Log.e(TAG, "compare_fk" + compare_fk);
/*erlier I was using this*/
            /*ArrayList<Integer> x = compare;
            ArrayList<Integer> y = compare_fk;
            for (int i = 0; i < x.size(); i++) {
                Integer xval = y.get(i);
                for (int j = 0; j < y.size(); j++) {
                    if (xval.equals(x.get(j))) {

                        Toast.makeText(context,"same_list"+y.get(j),Toast.LENGTH_SHORT).show();
                        holder.tv_time_of_slot.setTextColor(Color.RED);
                    }

                }
            }*/

            int array1Size = compare.size();
            int array2Size = compare_fk.size();
            if (compare.size() > compare_fk.size()) {
                int k = 0;
                for (int i = 0; i < compare_fk.size(); i++)            {
                    if (((Integer)compare.get(i)).equals((Integer)compare_fk.get(i)))  {
                        System.out.println((Integer)compare_fk.get(i));
                        Log.e("values_adapter", String.valueOf(((Integer)compare_fk.get(i))));
                    }
                    k = i;
                }
            }
            else {
                int k = 0;
                for (int i = 0; i < compare.size(); i++) {
                    if (((Integer)compare.get(i)).equals((Integer) compare_fk.get(i))) {
                        System.out.println((Integer) compare.get(i));
                        Log.e("values_adapter11",String.valueOf(((Integer)compare.get(i))));
                    }
                    k = i;
                }
            }





            if (time_slot_id == block_time_slot_id)
            {
                holder.tv_time_of_slot.setTextColor(Color.RED);
            }
            if (!(pojo.getGetBlockedTimings().get(position).getBlockDateOfSlot().equals("")))
            {
                holder.tv_d.setText(pojo.getGetBlockedTimings().get(position).getBlockDateOfSlot());
                holder.tv_b.setText(pojo.getGetBlockedTimings().get(position).getBlockId());
            }
        } catch (Exception e) {
            e.printStackTrace();
            e.getMessage();
        }

//        //iterate on the general list
//        for (int i = 0; i < availableTimeSlotses.size(); i++) {
//            int timeSlotId = availableTimeSlotses.get(i).getTimeSlotId();
//            if (getFk_time_id == timeSlotId) {
//
//                holder.tv_time_of_slot.setText(pojo.getDateOfSlot());
//            }
//        }
        // block api
        holder.btn_block.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Dialog lDialog = new Dialog(context);
                lDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                lDialog.setCancelable(false);
                lDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
                lDialog.getWindow().setDimAmount(.7f);
                lDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
                    lDialog.getWindow().setElevation(4);
                }

                lDialog.setContentView(R.layout.popup_no_yes);
                TextView tv_titiel = (TextView) lDialog.findViewById(R.id.tv_titiel);
                TextView textMsg = (TextView) lDialog.findViewById(R.id.popup_msgs);
                Button btnno = (Button) lDialog.findViewById(R.id.popup_no_btn);
                Button btnyes = (Button) lDialog.findViewById(R.id.popup_yes_btn);
                btnno.setTransformationMethod(null);
                btnyes.setTransformationMethod(null);
                tv_titiel.setText("Schedule");
                textMsg.setText("Are you sure you want to block this slot?");
                btnno.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        lDialog.dismiss();
                    }
                });
                btnyes.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("notification_fragment"));
                        slotBlockingApi(fkscheduleid, time_slot_id);
                        lDialog.dismiss();
                    }
                });
                lDialog.show();
            }
        });
    }

    @Override
    public int getItemCount() {
        return getDoctorScheduleDetails.size();
    }
    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

    public void slotBlockingApi(int _fk_schedule_id, int _fk_time_id) {
        isOnline();
        pd = createProgressDialog(context);
        pd.show();

        final String requestBody = "'{\"fkScheduledId\":\"" + _fk_schedule_id +
                "\",\"fkTimeId\":\"" + _fk_time_id +
                "\",\"DoctorId\":\"" + Doc_Id +
                "\"}'";

        Log.e(TAG, "requset body of slotBlockingApi : " + requestBody);

        NetworkManager.getInstance(context).makeNetworkRequestForJSON(
                Request.Method.POST,
                Common.BASE_URL + "/PostDoctorCheckForAppointmentBeforeSlotBlocking",
                null,
                requestBody,
                null,
                new NetworkResponseListenerJSONObject() {
                    @Override
                    public void onDataReceived(Object data) {
                        pd.dismiss();
                        Log.e(TAG, "response of slotBlockingApi : " + data.toString());
                        try {
                            JSONObject jsonObject = new JSONObject(data.toString());

                            JSONObject ResponseJsonObject1 = jsonObject.getJSONObject("Response");
                            int ResponseCode = ResponseJsonObject1.getInt("ResponseCode");
                            String ResponseText = ResponseJsonObject1.getString("ResponseText");

//                            JSONObject jsonObjectDetail = jsonObject.getJSONObject("Detail");
//                            Log.e(TAG, "jsonObjectDetail : " + jsonObjectDetail);
//                            int doc_id = jsonObjectDetail.getInt("DocId");

                           // if (ResponseText == "No Appointment" || ResponseText.equals("No Appointment") || ResponseText.equalsIgnoreCase("No Appointment")) {
                            if (ResponseText == "No Appointment" || ResponseText.equals("No Appointment") || ResponseText.equalsIgnoreCase("No Appointment")) {

//                                if (ResponseText =="No Appointment" || ResponseText.equals("No Appointment")) {

                                pd = createProgressDialog(context);
                                pd.show();

                                final String requestBody = "'{\"utcTimeOffset\":\"" + "330" +
                                        "\",\"BlockedScheduledDate\":\"" + DateofSlot +
                                        "\",\"fkScheduledId\":\"" + fkscheduleid +
                                        "\",\"fkTimeId\":\"" + time_slot_id +
                                        "\"}'";

                                Log.e(TAG, "requset body of slotBlocking: " + requestBody);

                                NetworkManager.getInstance(context).makeNetworkRequestForJSON(
                                        Request.Method.POST,
                                        Common.BASE_URL + "/PostDoctorBlockTimeSlot",
                                        null,
                                        requestBody,
                                        null,
                                        new NetworkResponseListenerJSONObject() {
                                            @Override
                                            public void onDataReceived(Object data) {
                                                pd.dismiss();
                                                new ShowMessage(context, "Block Slot","Time slot blocked Successfully");
                                                Log.e(TAG, "response of slotBlocking: " + data.toString());
                                            }

                                            @Override
                                            public void onDataFailed(VolleyError error) {
                                                pd.dismiss();
                                                String json = null;
                                                NetworkResponse response = error.networkResponse;
                                                if (response != null && response.data != null) {
                                                    switch (response.statusCode) {
                                                        case 302:
                                                            Toast.makeText(context, "No Internet Connection Found.", Toast.LENGTH_SHORT).show();
                                                            break;
                                                    }
                                                    //Additional cases
                                                }
                                            }
                                        });
                            } else {
                                final Dialog lDialog = new Dialog(context);
                                lDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                                lDialog.setCancelable(false);
                                lDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
                                lDialog.getWindow().setDimAmount(.7f);
                                lDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
                                    lDialog.getWindow().setElevation(4);
                                }
                                lDialog.setContentView(R.layout.custom_popup);
                                TextView textTitle = (TextView) lDialog.findViewById(R.id.popup_title);
                                TextView textMsg = (TextView) lDialog.findViewById(R.id.popup_msg);
                                Button okButton = (Button) lDialog.findViewById(R.id.popup_ok_btn);
                                okButton.setTransformationMethod(null);
                                textTitle.setText("Schedule");
                                textMsg.setText("An appointment has been booked on this slot.");
                                okButton.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        lDialog.dismiss();
                                    }
                                });
                                lDialog.show();
                            }

//                            else if (ResponseCode == 0 || ResponseCode == 2) {
//                                new ShowMessage(context, ResponseText);
//                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }

                    @Override
                    public void onDataFailed(VolleyError error) {
                        pd.dismiss();
                        String json = null;
                        NetworkResponse response = error.networkResponse;
                        if (response != null && response.data != null) {
                            switch (response.statusCode) {
                                case 302:
                                    Toast.makeText(context, "No Internet Connection Found.", Toast.LENGTH_SHORT).show();
                                    break;
                            }
                            //Additional cases
                        }
                    }
                });

    }

   

    public boolean isOnline() {
        ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = conMgr.getActiveNetworkInfo();

        if (netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable()) {
            new ShowMessage(context, "Network error","Internet not available, Cross check your internet connectivity and try again");
        }
        return true;
    }

    /**
     * VIEW HOLDER CLASS DEFINE HERE
     */
    public class ViewHolder extends RecyclerView.ViewHolder {

        @BindView(R.id.ll_row_item_get_doctor_schedule)
        LinearLayout ll_row_item_get_doctor_schedule;
        @BindView(R.id.tv_time_of_slot)
        TextView tv_time_of_slot;

        @BindView(R.id.btn_block)
        Button btn_block;
        @BindView(R.id.btn_unblock)
        Button btn_unblock;

        @BindView(R.id.tv_d)
        TextView tv_d;
        @BindView(R.id.tv_b)
        TextView tv_b;

        GetDoctorScheduleDetail doctorScheduleDetail = null;
        ItemClickListener clickListener;

        private ViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);

            ll_row_item_get_doctor_schedule.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //Handling for background selection state changed
                    int previousSelectState = mSelectedItemPosition;
                    mSelectedItemPosition = getAdapterPosition();
                    //notify previous selected item
                    notifyItemChanged(previousSelectState);
                    //notify new selected Item
                    notifyItemChanged(mSelectedItemPosition);

                    //Your other handling in onclick
                }
            });
        }

        public void setClickListener(ItemClickListener itemClickListener) {
            this.clickListener = itemClickListener;
        }

        @OnClick
        public void onClickMethod(View v) {
            clickListener.onClick(v, getPosition(), false);
        }


        public void bindDataWithViewHolder(GetDoctorScheduleDetail schedulePojo, int currentPosition) {
            this.doctorScheduleDetail = schedulePojo;
            //Handle selection  state in object View.
            if (currentPosition == mSelectedItemPosition) {
                btn_block.setVisibility(View.VISIBLE);

            } else {
                btn_block.setVisibility(View.GONE);
            }
            //other View binding logics like setting text , loading image  etc.


        }
    }
}

0 个答案:

没有答案