onClick在其他RecyclerView项目中的RecyclerView更改UI的一项

时间:2017-05-22 05:07:47

标签: android user-interface android-recyclerview

我有一个日期时间选择页面。其中有4个RecyclerViews(日期,早晨时间,下午时间,晚间时间)。在onClick of Date的基础上,填充了其他3个recyclerViews。问题在于选择时间。由于有三个回收站视图,我想要一个回收站视图的Click on项目(例如:MorningTime)将之前点击的其他recyclerview项目(Afternoon,Evening。)的值更改回未选中。

目前它就像[这个] [enter image description here] 1

我只想要一次,总体来说是选择。

// PickTimeAdapter.java

public class PickTimeAdapter extends RecyclerView.Adapter<PickTimeAdapter.MyViewHolder> {

private List<Time> timeList;
private Context context;
private OnPickTimeClickListener listener;
LayoutInflater inflter;
private int check = 0;
private int selectedPosition = -1;
private PickTimeNoonAdapter pickTimeNoonAdapter;
private PickTimeEveningAdapter pickTimeEveningAdapter;


public interface OnPickTimeClickListener {
    void onTimeClick(String time);
}

public PickTimeAdapter() {
    this.timeList = new ArrayList<>();
}

public PickTimeAdapter(int check, List<Time> time_slots) {

    this.check = check;
    this.timeList = time_slots;
}

public PickTimeAdapter(Context context, List<Time> time_slots, OnPickTimeClickListener listener, int check) {

    this.context = context;
    this.timeList = time_slots;
    this.listener = listener;
    this.check = check;
    inflter = (LayoutInflater.from(context));
}

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView tv_time_item;
    LinearLayout ll_time;

    public MyViewHolder(View view) {
        super(view);
        tv_time_item = (TextView) view.findViewById(R.id.tv_time_item);
        ll_time = (LinearLayout) view.findViewById(R.id.ll_time);
    }
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.time_item, parent, false);

    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
    final Time time = timeList.get(position);
    holder.tv_time_item.setText(time.getTime());
    /*if (time.getAvailable() == 1) {
        holder.tv_time_item.setBackgroundResource(R.drawable.gridview_text_box);
        holder.tv_time_item.setClickable(true);
    } else {
        holder.tv_time_item.setBackgroundResource(R.color.colorThemeBlack);
        holder.tv_time_item.setClickable(false);

    }*/
    holder.ll_time.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //  holder.tv_time_item.setBackgroundResource(R.color.colorPink);

            selectedPosition = position;
            if (check == 1) {

                listener.onTimeClick(time.getFullTime());
                //String value=String.valueOf(getItem(position));
            }



            notifyItemChanged(position);

            notifyDataSetChanged();
        }
    });

    if (selectedPosition == position && check == 1) {
        Toast.makeText(getApplicationContext(), time.getTime(), Toast.LENGTH_SHORT).show();
        holder.ll_time.setBackgroundResource(R.color.colorPink);
        Log.d("timeposition", String.valueOf(time.getFullTime()));





    } else {
        holder.ll_time.setBackgroundResource(R.drawable.gridview_text_box);
        check=1;
    }

}

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


public Object getItem(int i) {
    return timeList.get(i);
}

@Override
public long getItemId(int i) {
    return 0;
}

}

// PickTime.java

 private void populateTimes(List<Part> parts) {

       final ArrayList<Time> timeMorning = new ArrayList<>();
       final ArrayList<Time> timeAfternoon = new ArrayList<>();
       final ArrayList<Time> timeEvening = new ArrayList<>();


        for (Part part : parts) {

            if (part.getName().equals("Morning")) {
                for (Time time : part.getTime()) {
                    timeMorning.add(time);

                    Log.d("populateTimesMorning: ", time.getFullTime());


                }

            }

            if (part.getName().equals("Afternoon")) {
                for (Time time : part.getTime()) {
                    timeAfternoon.add(time);
                    Log.d("populateTimesNoon: ", time.getFullTime());

                }

            }
            if (part.getName().equals("Evening")) {
                for (Time time : part.getTime()) {
                    timeEvening.add(time);
                    Log.d("populateTimesEve: ", time.getFullTime());

                }

            }
            if (!timeMorning.isEmpty()) {
                rl_morning.setVisibility(View.VISIBLE);
                pickTimeAdapter = new PickTimeAdapter(PickDateTime.this, (ArrayList) timeMorning, new PickTimeAdapter.OnPickTimeClickListener() {
                    @Override
                    public void onTimeClick(String time) {

                        SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("DEVICE_PREFS", Context.MODE_PRIVATE);
                        SharedPreferences.Editor editor = sharedPref.edit();
                        editor.putString("time", time);
                        editor.apply();
                        editor.commit();
                        Log.d("fulltime", sharedPref.getString("time", "empty"));

                        pickTimeNoonAdapter.notifyDataSetChanged();
                        pickTimeEveningAdapter.notifyDataSetChanged();



                    }
                }, 1);
                rv_morning.setAdapter(pickTimeAdapter);

                pickTimeAdapter.notifyDataSetChanged();




            } else {
                rl_morning.setVisibility(View.GONE);
            }

            if (!timeAfternoon.isEmpty()) {
                rl_afternoon.setVisibility(View.VISIBLE);
               PickTimeNoonAdapter pickTimeNoonAdapter = new PickTimeNoonAdapter(PickDateTime.this, (ArrayList) timeAfternoon, new PickTimeNoonAdapter.OnPickTimeNoonClickListener() {
                    @Override
                    public void onTimeClick(String time) {

                        SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("DEVICE_PREFS", Context.MODE_PRIVATE);
                        SharedPreferences.Editor editor = sharedPref.edit();
                        editor.putString("time", time);
                        editor.apply();
                        editor.commit();
                        Log.d("timeposition", sharedPref.getString("time", "empty"));

                        pickTimeAdapter.notifyDataSetChanged();
                        pickTimeEveningAdapter.notifyDataSetChanged();



                    }
                }, 1);

                rv_afternoon.setAdapter(pickTimeNoonAdapter);
                pickTimeNoonAdapter.notifyDataSetChanged();





            } else {
                rl_afternoon.setVisibility(View.GONE);
            }

            if (!timeEvening.isEmpty()) {
                rl_evening.setVisibility(View.VISIBLE);
              PickTimeEveningAdapter pickTimeEveningAdapter = new PickTimeEveningAdapter(PickDateTime.this, (ArrayList) timeEvening, new PickTimeEveningAdapter.OnPickTimeEveningClickListener() {
                    @Override
                    public void onTimeClick(String time) {

                        SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("DEVICE_PREFS", Context.MODE_PRIVATE);
                        SharedPreferences.Editor editor = sharedPref.edit();
                        editor.putString("time", time);
                        editor.apply();
                        editor.commit();
                        Log.d("fulltime", sharedPref.getString("time", "empty"));



                        pickTimeAdapter.notifyDataSetChanged();
                        pickTimeNoonAdapter.notifyDataSetChanged();


                    }
                }, 1);
                rv_evening.setAdapter(pickTimeEveningAdapter);
                pickTimeEveningAdapter.notifyDataSetChanged();




            } else {
                rl_evening.setVisibility(View.GONE);
            }


        }


    }

2 个答案:

答案 0 :(得分:0)

int previous_Position=-1;

Time Model Class中,您必须添加1 boolean flag=flase; 然后点击将其设置为timeObject.setFlag(true);

previous_Position=position;

notifyItemchanged();

答案 1 :(得分:0)

public class PickTimeAdapter extends RecyclerView.Adapter<PickTimeAdapter.MyViewHolder> {

    // your code..
    private final List<PickTimeAdapter.MyViewHolder> _holderList;

    public PickTimeAdapter(Context context, List<Time> time_slots, OnPickTimeClickListener listener, int check) {

        // your code..
        _holderList = new ArrayList<>();
    }

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

        // your code..
        _holderList.add(holder);

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

                // unselected all
                for (PickTimeAdapter.MyViewHolder h : _holderList) {
                    h.itemView.setSelected(false);
                }

                // select current click
                view.setSelected(true);


                // your code..                  
            }
        });
    }
}