2017-05-22 75 views
0

我有一个日期 - 时间选择页面。其中有4个RecyclerViews(日期,上午时间,下午时间,晚上时间)。在onClick的日期的基础上,其他3个recyclerViews被填充。问题在于选择时间。由于有三个回收站视图,我希望一个回收站视图的点击项目(例如:MorningTime)将之前点击的其他回收站视图项目(下午,晚上)的值更改回未选中。onClick其他RecyclerView项目中的一个RecyclerView更改UI的项目

目前,它是如[这] [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); 
      } 


     } 


    } 

回答

0
int previous_Position=-1; 

在你Time Model Class你必须添加1 boolean flag=flase; 然后在点击设置我T作为timeObject.setFlag(true);

previous_Position=position; 

notifyItemchanged(); 
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..     
      } 
     }); 
    } 
} 
+0

不工作。还是一样的结果。 – Sonal