I am using the BigNerdRanch Library for my recycler view. I have fixed everything except for the highlighting of the rows. On LongClick the specific card doesnt highlight. Dont know why. OnClick works but then the highlighting of the views back to original color (which is white in my case) during deselection doesnt work. Any ideas or suggestions.
This is my layout for the RecyclerView:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/frame_layout_holder">
<android.support.v7.widget.CardView
android:id="@+id/card_holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:cardCornerRadius="0dp">
<RelativeLayout
android:id="@+id/card_linear_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/avatar_holder"
android:layout_width="@dimen/profile_pic_size"
android:layout_height="@dimen/profile_pic_size"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:contentDescription="Olla Image" />
<LinearLayout
android:id="@+id/text_holder_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/avatar_holder"
android:layout_toLeftOf="@+id/checkbox_holder"
android:layout_toRightOf="@+id/avatar_holder"
android:layout_toStartOf="@+id/checkbox_holder"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingEnd="@dimen/activity_horizontal_margin"
android:paddingLeft="0dp"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingStart="0dp"
android:paddingTop="@dimen/activity_vertical_margin">
<TextView
android:id="@+id/text_view1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#ff00ff"
android:textSize="@dimen/list_item_1" />
<TextView
android:id="@+id/text_view2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#ff00ff"
android:textSize="@dimen/list_item_2" />
</LinearLayout>
<LinearLayout
android:id="@+id/checkbox_holder"
android:layout_width="@dimen/check_box_holder_width"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="@dimen/check_box_width"
android:layout_height="@dimen/check_box_width" />
<ImageView
android:id="@+id/delete_row"
android:layout_width="@dimen/check_box_width"
android:layout_height="@dimen/check_box_width"
android:contentDescription="Delete Image"
android:src="@android:drawable/ic_menu_close_clear_cancel"
android:visibility="invisible" />
</LinearLayout>
</RelativeLayout>
</android.support.v7.widget.CardView>
</FrameLayout>
This is where I am implementing my clicks which is inside the Holder:
public class CustomRecyclerViewHolder extends SwappingHolder implements View.OnClickListener, View.OnLongClickListener {
private TextView mMsg1, mMsg2;
//private ImageView mAvatarView;
private CheckBox mCheckBox;
private LinearLayout checkboxHolder;
private ImageView mDeleteRow;
private CardView cardView;
private Category category;
private CustomRecyclerViewHolder customRecyclerViewHolder;
private int i = 0;
private RelativeLayout relativeLayoutInCardView;
/**
* Initializes all the views of a ViewHolder
*
* @param itemView parent view in which all the List Item views are present
*/
public CustomRecyclerViewHolder(View itemView) {
super(itemView, mycategoryFragment.mMultiSelector);
mMsg1 = (TextView) itemView.findViewById(R.id.text_view1);
mMsg2 = (TextView) itemView.findViewById(R.id.text_view2);
//mAvatarView = (ImageView)itemView.findViewById(R.id.avatar_holder);
mCheckBox = (CheckBox) itemView.findViewById(R.id.checkbox);
checkboxHolder = (LinearLayout) itemView.findViewById(R.id.checkbox_holder);
mDeleteRow = (ImageView) itemView.findViewById(R.id.delete_row);
cardView = (CardView) itemView.findViewById(R.id.card_holder);
relativeLayoutInCardView = (RelativeLayout) itemView.findViewById(R.id.card_linear_holder);
itemView.setOnClickListener(this);
itemView.setLongClickable(true);
itemView.setOnLongClickListener(this);
}
public void bindcategory(Category category) {
this.category = category;
mMsg1.setText(category.getMedicineName());
mMsg2.setText(category.getDescriptionName());
System.out.println("86969696978");
if (mycategoryFragment.mMultiSelector.getSelectedPositions().size()==0) {
relativeLayoutInCardView.setBackgroundColor(Color.BLACK);
}
}
@Override
public void onClick(View v) {
if (category == null) {
return;
}
if (mycategoryFragment.mMultiSelector.tapSelection(this)) {
for (int i = categoryArrayList.size(); i >= 0; i--) {
if (mycategoryFragment.mMultiSelector.isSelected(i, 0)) {
System.out.println("I am at position in OnClick at " + i);
relativeLayoutInCardView.setBackgroundColor(Color.BLACK);
}
if (!mycategoryFragment.mMultiSelector.isSelected(i, 0)) {
System.out.println("I am at position in OnClick at " + i);
relativeLayoutInCardView.setBackgroundColor(Color.WHITE);
}
}
if (mycategoryFragment.mMultiSelector.getSelectedPositions().size()==0) {
isOnLongPressReceived = false;
System.out.println("I am at end");
}
}
}
@Override
public boolean onLongClick(View v) {
if(!isOnLongPressReceived) {
((AppCompatActivity) mContext).startSupportActionMode(mycategoryFragment.mDeleteMode);
mycategoryFragment.mMultiSelector.setSelected(this, true);
for (int i = categoryArrayList.size(); i >= 0; i--) {
if (mycategoryFragment.mMultiSelector.isSelected(i, 0)) {
System.out.println("I am at position in OnLong at " + i);
cardView.setBackgroundColor(Color.BLACK);
}
}
isOnLongPressReceived = true;
}
return true;
}
@Override
public void setSelectable(boolean isSelectable) {
super.setSelectable(isSelectable);
//relativeLayoutInCardView.setBackgroundColor(Color.BLACK);
}
@Override
public void setActivated(boolean isActivated) {
super.setActivated(isActivated);
relativeLayoutInCardView.setBackgroundColor(Color.WHITE);
}
}