【问题标题】:CardView with RelativeLayout not updating properly after click带有RelativeLayout的CardView在点击后没有正确更新
【发布时间】:2020-10-23 19:22:20
【问题描述】:

我试图在单击时更改我的文本视图(状态)之一,但它只是删除当前文本并显示我的原始文本的文本。 文本视图当前显示“未采用”或“待定”,具体取决于从我的数据库中检索到的数据。

我的弹出对话框片段代码在回收视图中显示卡片项目。

   public class FragmentLocationPopup extends DialogFragment {

        View mView;
        TextView tvSelectedBranch;
        RecyclerView mScheduleList;
        ScheduleAdapter mAdapter;
        RecyclerView.LayoutManager mLayoutManager;

        String TAG = "DialogFragment";

        ArrayList<Schedule> scheduleList;
        VariablesHolder variablesHolder;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mView = inflater.inflate(R.layout.fragment_location_popup, container, false);

        createScheduleList();
        buildRecyclerView();

        return mView;
    }

    public void createScheduleList(){

        scheduleList = new ArrayList<>();
        tvSelectedBranch = mView.findViewById(R.id.tvSelectedBranch);

        variablesHolder = (VariablesHolder) getActivity().getApplicationContext();
        String selectedBranch = variablesHolder.getSelectedBranch();

        tvSelectedBranch.setText(selectedBranch);
        Log.d(TAG, "Selected branch = "+selectedBranch);

        Call<List<Schedule>> call = RetrofitClient.getInstance().getApiDate().getSchedule();
        call.enqueue(new Callback<List<Schedule>>() {
            @Override
            public void onResponse(Call<List<Schedule>> call, Response<List<Schedule>> response) {

                List<Schedule> schedules = response.body();

                for (Schedule schedule : schedules) {
                    if(schedule.getBranchID().equals(variablesHolder.getBranchID())) {
                        scheduleList.add(new Schedule(schedule.getWorkScheduleFromDateTime(), schedule.getWorkScheduleToDateTime(),schedule.getWorkScheduleStatus()));
                        Log.d(TAG, "onResponse: " + schedule.getWorkScheduleFromDateTime() + " and " + schedule.getWorkScheduleToDateTime() + " and "+schedule.getWorkScheduleStatus());
                    }
                }

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

        String asd = ""+variablesHolder.getBranchIdList();
        Log.d(TAG, "onCreateView: "+asd);
    }

    public void buildRecyclerView(){
        mScheduleList = mView.findViewById(R.id.rvScheduleList);
        mScheduleList.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(mView.getContext());
        mAdapter = new ScheduleAdapter(scheduleList);

        mScheduleList.setLayoutManager(mLayoutManager);
        mScheduleList.setAdapter(mAdapter);

        mAdapter.setOnItemClickListener(new ScheduleAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                changeItem(position, "Clicked");

            }
        });
    }

    public void changeItem(int position, String text){
        scheduleList.get(position).changeText1(text);
        mAdapter.notifyItemChanged(position);

        Log.d(TAG, "changeItem: "+position+" / "+text);
    }
}

我的日程安排类(我目前只在其中使用 3 个变量)workfromtime、worktotime 和 workstatus

   public class Schedule {

    private String workScheduleID;
    private Date  workScheduleFromDateTime;
    private Date workScheduleToDateTime;
    private String workScheduleStatus;
    private String workDescriptionID;
    private String branchID;
    private String staffID;
    private String managerID;
    private String workScheduleBidDateTime;

    public Schedule(Date workScheduleFromDateTime, Date workScheduleToDateTime,String workScheduleStatus) {
        this.workScheduleFromDateTime = workScheduleFromDateTime;
        this.workScheduleToDateTime = workScheduleToDateTime;
        this.workScheduleStatus = workScheduleStatus;
    }

    public void changeText1(String workScheduleStatus){
        this.workScheduleStatus = workScheduleStatus;
    }

    public String getWorkScheduleID(){return workScheduleID;}
    public Date getWorkScheduleFromDateTime(){return workScheduleFromDateTime;}
    public Date getWorkScheduleToDateTime(){return workScheduleToDateTime;}
    public String getWorkScheduleStatus(){return workScheduleStatus;}
    public String getWorkDescriptionID(){return workDescriptionID;}
    public String getBranchID(){return branchID;}
    public String getStaffID(){return staffID;}
    public String getManagerID(){return managerID;}
    public String getWorkScheduleBidDateTime(){return workScheduleBidDateTime;}

}

适配器类

public class ScheduleAdapter extends RecyclerView.Adapter<ScheduleAdapter.ScheduleViewHolder> {

    private static final String TAG = "ScheduleAdapter";
    private ArrayList<Schedule> mScheduleList;
    private OnItemClickListener mListener;


    public interface OnItemClickListener{
        void onItemClick(int position);
    }
    public void setOnItemClickListener(OnItemClickListener listener){
        mListener = listener;
    }

    public static class ScheduleViewHolder extends RecyclerView.ViewHolder{


        public TextView FromTime,ToTime,ScheduleStatus,Tester;

        public ScheduleViewHolder(@NonNull final View itemView, final OnItemClickListener listener) {
            super(itemView);

            FromTime = itemView.findViewById(R.id.tvFromTime);
            ToTime = itemView.findViewById(R.id.tvToTime);
            ScheduleStatus = itemView.findViewById(R.id.tvStatus);
            Tester = itemView.findViewById(R.id.tvTest);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(listener != null){
                        int position = getAdapterPosition();
                        if(position != RecyclerView.NO_POSITION){
                            listener.onItemClick(position);
                        }
                    }
                }
            });
        }
    }

    public ScheduleAdapter(ArrayList<Schedule> scheduleList ){
        mScheduleList = scheduleList;
    }

    @NonNull
    @Override
    public ScheduleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.schedule_item,parent,false);
        ScheduleViewHolder svh = new ScheduleViewHolder(mView, mListener);
        return svh;
    }

    @Override
    public void onBindViewHolder(@NonNull ScheduleViewHolder holder, int position) {
        Schedule currentSchedule = mScheduleList.get(position);
        Log.d(TAG, "onBindViewHolder: "+currentSchedule.getWorkScheduleFromDateTime() + " and "+currentSchedule.getWorkScheduleToDateTime());

        String FromTimeRegion = currentSchedule.getWorkScheduleFromDateTime().toString().replace("GMT 2020","");
        String ToTimeRegion = currentSchedule.getWorkScheduleToDateTime().toString().replace("GMT 2020","");
        String status = currentSchedule.getWorkScheduleStatus();

        Log.d(TAG, "onBindViewHolder: "+status);

        if(status.toLowerCase().equals("pending")) {
            holder.ScheduleStatus.setText("Pending");
            holder.ScheduleStatus.setTextColor(Color.parseColor("#FFFF00"));
        }
        if(status.toLowerCase().equals("not taken")) {
            holder.ScheduleStatus.setText("Not Taken");
            holder.ScheduleStatus.setTextColor(Color.parseColor("#7FFF00"));
        }

        holder.FromTime.setText("From: "+FromTimeRegion);
        holder.ToTime.setText("To: "+ToTimeRegion);
    }

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

请指教。

【问题讨论】:

    标签: android-studio cardview


    【解决方案1】:

    我发现是我这部分代码造成的。

     if(status.toLowerCase().equals("pending")) {
                holder.ScheduleStatus.setText("Pending");
                holder.ScheduleStatus.setTextColor(Color.parseColor("#FFFF00"));
            }
            if(status.toLowerCase().equals("not taken")) {
                holder.ScheduleStatus.setText("Not Taken");
                holder.ScheduleStatus.setTextColor(Color.parseColor("#7FFF00"));
            }
    
            holder.FromTime.setText("From: "+FromTimeRegion);
            holder.ToTime.setText("To: "+ToTimeRegion);
    

    只需要编辑哪个先出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 2022-06-11
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多