【发布时间】:2016-11-10 18:04:21
【问题描述】:
这很奇怪,但是当我使用我的代码长按某一行时,该行上的星星变成金色(这是我想要的),而且每颗星星相隔十行。 这是我的代码:
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView localeDisplay;
private static final int grey_blue = 0xff546E7A;
private static final int gold = 0xffffa000;
public MyViewHolder(final View view) {
super(view);
localeDisplay = (TextView) view.findViewById(R.id.languageText);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Languages currentLanguages = languagesList.get(getAdapterPosition());
Snackbar snackbar;
snackbar = Snackbar.make(view, currentLanguages.getLocaleDisplay() + " selected", Snackbar.LENGTH_INDEFINITE)
.setAction("Next", new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), MainActivity.class);
v.getContext().startActivity(intent);
}
});
View snackBarView = snackbar.getView();
snackBarView.setBackgroundColor(grey_blue);
snackbar.show();
}
}
);
view.setOnLongClickListener(new View.OnLongClickListener()
{
@Override
public boolean onLongClick(View v) {
Toast.makeText(v.getContext(), "Position is " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
ImageView star = (ImageView) view.findViewById(R.id.imageView);
if (star.getColorFilter() == null) {
star.setColorFilter(gold);
} else star.clearColorFilter();
return true;
}
}
);
}
我曾尝试关注this tutorial,但发生了同样的行为。 有什么想法可以纠正这个问题吗?
【问题讨论】:
-
视图正在被回收,这意味着它将被重用而不是重新创建。如果您将星星设置为一个,当它被重复使用时,仍然会设置开始。您需要为每个项目单独设置一个标志,以确定它是否应该设置星标。
set意思是把它变成金色。 -
感谢您的回复,但对于动态更改的列表,这可能吗?如果是这样,我会尝试弄清楚如何做到这一点。
-
您只需要一种方法将列表中的每个特定项目标记为单击或未单击。例如,如果您在列表中设置了第 9 项,则需要说明单击第 9 项的内容。有很多方法可以解决这个问题。适配器只是认识到它是一个可用于您想要做的事情的视图。它不关心视图的当前状态是什么。
-
感谢您的快速回复! :)
标签: android android-studio onclick android-recyclerview