Java ImageView上的涟漪效应未触发
我有一个Java ImageView上的涟漪效应未触发,java,android,android-layout,android-recyclerview,material-design,Java,Android,Android Layout,Android Recyclerview,Material Design,我有一个RecyclerView,每个项目中都有ImageViews 我在onBindViewHolder中为ImageViews设置onClickListener,如下所示: holder.starIV.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO: logic } })
RecyclerView
,每个项目中都有ImageView
s
我在onBindViewHolder
中为ImageView
s设置onClickListener
,如下所示:
holder.starIV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO: logic
}
});
涟漪效应运行良好,直到我将以下逻辑添加到onClick
。此逻辑更改ImageView
的Drawable
holder.starIV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == holder.starIV.getId()) {
ListItem clickedItem = mDataset.get(position);
ListItem updatedItem = new ListItem(clickedItem);
if (clickedItem.getStarState() == STAR_ON) {
updatedItem.setStarState(STAR_OFF);
updatedItem.setStarDrawable(
ContextCompat.getDrawable(
v.getContext(),R.drawable.ic_star_border_24px));
}
else if (clickedItem.getStarState() == STAR_OFF) {
updatedItem.setStarState(STAR_ON);
updatedItem.setStarDrawable(
ContextCompat.getDrawable(
v.getContext(),R.drawable.ic_star_24px));
}
mDataset.set(position,updatedItem);
notifyDataSetChanged();
}
}
});
现在,我没有任何连锁反应。以下是ImageView
的XML:
<ImageView
android:id="@+id/list_item_star"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:paddingLeft="4dp"
android:paddingRight="16dp"
android:src="@drawable/ic_star_border_24px"
android:clickable="true"
android:background="?attr/selectableItemBackgroundBorderless"
android:drawSelectorOnTop="true"
/>
将以下代码添加到父布局中
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackgroundBorderless"
您可以将ripple drawable设置为图像视图的前景。我尝试了您的解决方案。似乎只有在我点击父布局的区域(不包括ImageView)时才会触发涟漪效应。请尝试将focusable=false和focusableintouchmode=false放入xml格式的ImageView。我尝试了您的解决方案。行为没有改变。
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackgroundBorderless"