Этот вопрос связан с моим предыдущим вопросом в здесь.
У меня есть RecyclerView
, который показывает несколько (8) CardView
. Внутри каждого CardView
есть несколько элементов, таких как TextView
, ImageButton
и т. д. Я хочу изменить цвет вектора (.xml), назначенного ImageButton
, с помощью OnClickListener
той же кнопки.
Я использую интерфейс для связи между классом адаптера (RvAdapter расширяет RecyclerView.Adapter) и фрагментом.
public interface RvItemClickListener {
void cardClick(View view, int position);
void alarmClick(View view,int position);
}
В классе адаптера:
public class RvAdapter extends RecyclerView.Adapter<RvAdapter.ViewHolder> {
private List<Person> persons;
RvItemClickListener rvItemClickListener;
private Context mContext;
public RvAdapter(Context context,List<Person> persons) {
this.mContext=context;
this.persons=persons;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_content,parent,false);
ViewHolder vh=new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
final ViewHolder mHolder=holder;
mHolder.personName.setText(persons.get(position).name);
mHolder.personAge.setText( persons.get(position).age);
}
public void adapterSetClickListener(RvItemClickListener rvItemClickListener){
this.rvItemClickListener=rvItemClickListener;
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
CardView cvCard;
TextView personName;
TextView personAge;
ImageButton alarmImageButton;
public ViewHolder(View itemView) {
super(itemView);
cvCard=(CardView)itemView.findViewById(R.id.cv_card);
personName=(TextView)itemView.findViewById(R.id.txt_person_name);
personAge=(TextView)itemView.findViewById(R.id.txt_person_age);
alarmImageButton=(ImageButton)itemView.findViewById(R.id.alarm_image_button);
cvCard.setOnClickListener(this);
alarmImageButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.cv_card:
if(rvItemClickListener!=null)
rvItemClickListener.cardClick(view,getAdapterPosition());
break;
case R.id.alarm_image_button:
if(rvItemClickListener!=null)
rvItemClickListener.alarmClick(view, getAdapterPosition());
break;
default:
break;
}
}
}
}
В моем классе фрагментов:
public class Main_fragment extends Fragment implements RvItemClickListener{
private RvAdapter myRecyclerAdaper;
ImageButton alarmImageButton;
private HashMap<Integer, Boolean> clickedItems;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
myRecyclerAdaper.adapterSetClickListener(this);
clickedItems=new HashMap<>();
}
@Override
public void cardClick(View view, int position) {
//openinig a new fragment.....this works fine
getDataToBundle(view,position);
nextFragmentInstance.setTargetFragment(this,0);
nextFragmentInstance.setArguments(detailsToPass);
this.getFragmentManager()
.beginTransaction()
.replace(R.id.content_main,newFragmentInstance,"tag")
.addToBackStack(null).commit();
}
@Override
public void alarmClick(View view, int position) {
//toast to make sure wheather the click event identify the position... works fine
Toast.makeText(getContext(),String.valueOf(position),Toast.LENGTH_SHORT).show();
//changing the color of ImageButton vector using an instance of it
alarmImageButton=(ImageButton)view.findViewById(R.id.alarm_image_button);
if(!clickedItems.containsKey(position)) {
alarmImageButton.setColorFilter(Color.argb(255, 255, 255, 255));
clickedItems.put(position, true);
}else{
alarmImageButton.setColorFilter(Color.argb(0,0,0,0));
clickedItems.remove(position);
}
}
}
Я не привел полный код класса Fragment. Если кто-то хочет, я могу обновить код.
Однако вопрос похож на этот. Единственная разница в том, что на этот раз я использую интерфейс вместо onBindViewHolder()
для событий щелчка. Когда я нажимаю на ImageButton
, цвет его вектора меняется вместе с другим вектором ImageButton
. Я попытался решить это, как в ссылке, которую я дал. Однако я потерпел неудачу.
Fragment
? Как я вижу, вы меняете только цвет кнопок, что вы можете просто сделать изAdapter
. - person earthw0rmjim   schedule 07.07.2017