我有一个日期时间选择页面。其中有4个RecyclerViews(日期,早晨时间,下午时间,晚间时间)。在onClick of Date的基础上,填充了其他3个recyclerViews。问题在于选择时间。由于有三个回收站视图,我想要一个回收站视图的Click on项目(例如:MorningTime)将之前点击的其他recyclerview项目(Afternoon,Evening。)的值更改回未选中。
目前它就像[这个] [] 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);
}
}
}
答案 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..
}
});
}
}