이상하게 들리지만 코드를 사용하여 하나의 행을 길게 누르면 해당 행의 별이 금색으로 바뀝니다.RecyclerView - 하나의 선택으로 10 개의 행이 선택됩니다.
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가 있지만 같은 동작이 발생 다음 시도 : 이 내 코드입니다. 이 문제를 해결하기 위해 내가 할 수있는 아이디어가 있습니까?
뷰가 재생 중입니다. 즉, 뷰가 재생성되는 대신 재사용됨을 의미합니다. 별을 하나로 설정하면 재사용 할 때 시작이 계속 설정됩니다. 각 항목에 별표가 있어야하는지 여부를 결정하기 위해 플래그를 개별적으로 필요로합니다. '설정'은 금을 돌리는 것을 의미합니다. – zgc7009
답장을 보내 주셔서 감사합니다. 그러나 동적으로 변경되는 목록에 대해서는 가능한가요? 그렇다면, 나는 그것을 어떻게하는지 알아 내려고 노력할 것입니다. –
클릭 한대로 목록의 각 특정 항목에 플래그를 지정하는 방법이 필요합니다. 예를 들어 목록에 항목 9를 설정 한 경우 항목 9가 클릭되었다는 내용이 필요합니다. 이것에 접근하는 방법은 매우 많습니다. 어댑터는 단지 당신이하고 싶은 것을 위해 사용할 수있는 뷰임을 인식합니다. 보기의 현재 상태가 무엇인지는 상관하지 않습니다. – zgc7009