Java 为什么getAdapterPosition()每(比如)5秒就卡在单击的第一个视图上?
我有一个RecyclerView类(QuestionCardAdapter),它将SpanishQuestionSet的所有项显示为CardView 一切都很正常(例如,我可以在点击一张卡片时,弹出“勾选”和“交叉”按钮,并在点击时移除卡片) 然而,最近我想通过点击按钮(vCross或VTick)来修改作为SpanishQuestionSet一部分的数组(即数组中的项为+1表示错误,为-1表示正确,因此我使用的降序快速排序将导致错误回答的问题位于顶部) 然而,每当我说点击4张连续的牌是错误的,而不是每张牌的分数增加1,4的分数的第一张牌增加4。getAdapterPosition()似乎已延迟。它会受到我添加的时间限制变量的影响吗?这样,如果有人在卡片移除动画完成之前双击按钮,应用程序就不会崩溃 任何帮助都将不胜感激,我将在下面介绍adapter和SpanishQuestionSet类 适配器类很可能是重点Java 为什么getAdapterPosition()每(比如)5秒就卡在单击的第一个视图上?,java,android,class,android-recyclerview,adapter,Java,Android,Class,Android Recyclerview,Adapter,我有一个RecyclerView类(QuestionCardAdapter),它将SpanishQuestionSet的所有项显示为CardView 一切都很正常(例如,我可以在点击一张卡片时,弹出“勾选”和“交叉”按钮,并在点击时移除卡片) 然而,最近我想通过点击按钮(vCross或VTick)来修改作为SpanishQuestionSet一部分的数组(即数组中的项为+1表示错误,为-1表示正确,因此我使用的降序快速排序将导致错误回答的问题位于顶部) 然而,每当我说点击4张连续的牌是错误的,而
package com.alexgower.odin_spanishpack;
import android.content.Context;
import android.graphics.Color;
import android.os.SystemClock;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.FileNotFoundException;
import java.util.List;
public class QuestionCardAdapter extends RecyclerView.Adapter<QuestionCardAdapter.QuestionCardViewHolder> {
private final Context context;
protected List<QuestionCardInfo> questionCardList;
private long mLastClickTime = 0;
private SpanishQuestionSet questionSet;
private int positionClicked;
private void setPositionClicked(int i){
this.positionClicked =i;
}
private int getPositionClicked(){
return this.positionClicked;
}
public QuestionCardAdapter(Context contextIn, List<QuestionCardInfo> questionCardList, SpanishQuestionSet questionSetIn) {
this.questionCardList = questionCardList;
this.context = contextIn;
this.questionSet = questionSetIn;
}
@Override
public int getItemCount() {
return questionCardList.size();
}
@Override
public void onBindViewHolder(QuestionCardViewHolder questionCardViewHolder, int i) {
QuestionCardInfo ci = questionCardList.get(i);
questionCardViewHolder.vQuestionAnswer.setText(String.valueOf(ci.score) + ci.question);
questionCardViewHolder.answer = ci.answer;
questionCardViewHolder.vTick.setVisibility(View.INVISIBLE);
questionCardViewHolder.vCross.setVisibility(View.INVISIBLE);
questionCardViewHolder.vColorTV.setBackgroundColor(questionSet.getColourForScore(context,ci.score));
}
@Override
public QuestionCardViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.
from(viewGroup.getContext()).
inflate(R.layout.question_card_layout, viewGroup, false);
return new QuestionCardViewHolder(itemView);
}
public class QuestionCardViewHolder extends RecyclerView.ViewHolder {
public View view;
protected TextView vQuestionAnswer;
protected TextView vColorTV;
protected ImageView vTick;
protected ImageView vCross;
protected String answer = "Error";
public QuestionCardViewHolder(View v) {
super(v);
vColorTV = (TextView) v.findViewById(R.id.forNowColourTextView);
vQuestionAnswer = (TextView) v.findViewById(R.id.questionAnswerTextView);
vTick = (ImageView) v.findViewById(R.id.tickImage);
vCross = (ImageView) v.findViewById(R.id.crossImage);
view = v;
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vQuestionAnswer.setText(answer);
vTick.setVisibility(View.VISIBLE);
vCross.setVisibility(View.VISIBLE);
setPositionClicked(getAdapterPosition());
}
});
view = vTick;
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (SystemClock.elapsedRealtime() - mLastClickTime > 1000) {
questionSet.questionRight(getPositionClicked(),context);
//questionSet.saveScores(context);
Toast.makeText(context, String.valueOf(questionSet.getScore(getPositionClicked())), Toast.LENGTH_LONG).show();
removeAt(getPositionClicked());
mLastClickTime = SystemClock.elapsedRealtime();
}
}
});
view = vCross;
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (SystemClock.elapsedRealtime() - mLastClickTime > 1000) {
questionSet.questionWrong(getPositionClicked(),context);
Toast.makeText(context, String.valueOf(questionSet.getScore(getPositionClicked())), Toast.LENGTH_LONG).show();
removeAt(getPositionClicked());
mLastClickTime = SystemClock.elapsedRealtime();
}
}
});
}
}
public void testContext(int position) {
questionSet.testFile(position, context);
//String name = questionSet.getQuestion(position);
//try {
// context.openFileOutput("a.txt", Context.MODE_PRIVATE);
// Toast.makeText(context, name, Toast.LENGTH_SHORT).show();
//}catch(FileNotFoundException e){
// Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show();
//}
}
public void removeAt(int position) {
questionCardList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, questionCardList.size());
}
package com.alexgower.odin_spanishpack;
导入android.content.Context;
导入android.graphics.Color;
导入android.os.SystemClock;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.io.FileNotFoundException;
导入java.util.List;
公共类QuestionCardAdapter扩展了RecyclerView.Adapter{
私人最终语境;
受保护名单;
私有长mLastClickTime=0;
私人SpanishQuestionSet问题集;
私有int地址;
私有void setPositionClicked(int i){
这个=i;
}
private int getPositionClicked(){
返回此项。单击此项;
}
公共问题卡适配器(上下文上下文输入、列表问题卡列表、SpanishQuestionSet问题集输入){
this.questionCardList=questionCardList;
this.context=contextIn;
this.questionSet=questionSetIn;
}
@凌驾
public int getItemCount(){
返回问题cardlist.size();
}
@凌驾
BindViewHolder上的公共无效(问题卡片ViewHolder问题卡片ViewHolder,int i){
QuestionCardInfo ci=questionCardList.get(i);
questionCardViewHolder.vQuestionAnswer.setText(String.valueOf(ci.score)+ci.question);
questionCardViewHolder.answer=ci.answer;
questionCardViewHolder.vTick.setVisibility(视图.不可见);
问题卡片ViewHolder.vCross.setVisibility(视图不可见);
questionCardViewHolder.vColorTV.setBackgroundColor(questionSet.GetColorForCore(context,ci.score));
}
@凌驾
公共问题卡ViewHolder onCreateViewHolder(视图组视图组,int i){
视图项视图=布局调整器。
来自(viewGroup.getContext())。
充气(右布局、问题卡布局、视图组、假);
返回新的问题卡片视图持有者(itemView);
}
公共类问题CardViewHolder扩展了RecyclerView.ViewHolder{
公众观点;
受保护的文本视图问题答案;
受保护的TextView vColorTV;
受保护的图像视图vTick;
保护图像视图vCross;
受保护字符串answer=“Error”;
公共问题卡视图持有者(视图五){
超级(五);
vColorTV=(文本视图)v.findViewById(R.id.fornowColorTextView);
vQuestionAnswer=(TextView)v.findViewById(R.id.questionAnswerTextView);
vTick=(ImageView)v.findViewById(R.id.tickImage);
vCross=(图像视图)v.findviewbyd(R.id.crossImage);
视图=v;
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
vQuestionAnswer.setText(答案);
vTick.setVisibility(View.VISIBLE);
vCross.setVisibility(View.VISIBLE);
setPositionClicked(getAdapterPosition());
}
});
视图=vTick;
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(SystemClock.elapsedRealtime()-mLastClickTime>1000){
questionSet.questionRight(getPositionClicked(),上下文);
//问题集。保存分数(上下文);
Toast.makeText(context,String.valueOf(questionSet.getScore(getPositionClicked())),Toast.LENGTH_LONG.show();
移除(getPositionClicked());
mLastClickTime=SystemClock.elapsedRealtime();
}
}
});
视图=vCross;
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(SystemClock.elapsedRealtime()-mLastClickTime>1000){
questionSet.QuestionError(getPositionClicked(),上下文);
Toast.makeText(context,String.valueOf(questionSet.getScore(getPositionClicked())),Toast.LENGTH_LONG.show();
移除(getPositionClicked());
mLastClickTime=SystemClock.elapsedRealtime();
}
}
});
}
}
公共void testContext(int位置){
testFile(位置、上下文);
//字符串名称=questionSet.getQuestion(位置);
//试一试{
//context.openFileOutput(“a.txt”,context.MODE\u PRIVATE);
//Toast.makeText(上下文、名称、Toast.LENGTH_SHORT).show();
//}catch(filenotfounde异常){
//Toast.makeText(上下文,例如getMessage(),Toast.LENGTH_SHORT).show();
//}
}
公共无效删除(内部位置){
问题卡片列表。移除(位置);
已移除(位置)的项目;
notifyItemRangeChanged(位置,questionCardList.size());
}
西班牙之旅
package com.alexgower.odin_spanishpack;
import android.content.Context;
import android.graphics.Color;
import android.os.SystemClock;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.FileNotFoundException;
import java.util.List;
public class QuestionCardAdapter extends RecyclerView.Adapter<QuestionCardAdapter.QuestionCardViewHolder> {
private final Context context;
protected List<QuestionCardInfo> questionCardList;
private long mLastClickTime = 0;
private SpanishQuestionSet questionSet;
private int positionClicked;
private void setPositionClicked(int i){
this.positionClicked =i;
}
private int getPositionClicked(){
return this.positionClicked;
}
public QuestionCardAdapter(Context contextIn, List<QuestionCardInfo> questionCardList, SpanishQuestionSet questionSetIn) {
this.questionCardList = questionCardList;
this.context = contextIn;
this.questionSet = questionSetIn;
}
@Override
public int getItemCount() {
return questionCardList.size();
}
@Override
public void onBindViewHolder(QuestionCardViewHolder questionCardViewHolder, int i) {
QuestionCardInfo ci = questionCardList.get(i);
questionCardViewHolder.vQuestionAnswer.setText(String.valueOf(ci.score) + ci.question);
questionCardViewHolder.answer = ci.answer;
questionCardViewHolder.vTick.setVisibility(View.INVISIBLE);
questionCardViewHolder.vCross.setVisibility(View.INVISIBLE);
questionCardViewHolder.vColorTV.setBackgroundColor(questionSet.getColourForScore(context,ci.score));
}
@Override
public QuestionCardViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.
from(viewGroup.getContext()).
inflate(R.layout.question_card_layout, viewGroup, false);
return new QuestionCardViewHolder(itemView);
}
public class QuestionCardViewHolder extends RecyclerView.ViewHolder {
public View view;
protected TextView vQuestionAnswer;
protected TextView vColorTV;
protected ImageView vTick;
protected ImageView vCross;
protected String answer = "Error";
public QuestionCardViewHolder(View v) {
super(v);
vColorTV = (TextView) v.findViewById(R.id.forNowColourTextView);
vQuestionAnswer = (TextView) v.findViewById(R.id.questionAnswerTextView);
vTick = (ImageView) v.findViewById(R.id.tickImage);
vCross = (ImageView) v.findViewById(R.id.crossImage);
view = v;
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vQuestionAnswer.setText(answer);
vTick.setVisibility(View.VISIBLE);
vCross.setVisibility(View.VISIBLE);
setPositionClicked(getAdapterPosition());
}
});
view = vTick;
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (SystemClock.elapsedRealtime() - mLastClickTime > 1000) {
questionSet.questionRight(getPositionClicked(),context);
//questionSet.saveScores(context);
Toast.makeText(context, String.valueOf(questionSet.getScore(getPositionClicked())), Toast.LENGTH_LONG).show();
removeAt(getPositionClicked());
mLastClickTime = SystemClock.elapsedRealtime();
}
}
});
view = vCross;
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (SystemClock.elapsedRealtime() - mLastClickTime > 1000) {
questionSet.questionWrong(getPositionClicked(),context);
Toast.makeText(context, String.valueOf(questionSet.getScore(getPositionClicked())), Toast.LENGTH_LONG).show();
removeAt(getPositionClicked());
mLastClickTime = SystemClock.elapsedRealtime();
}
}
});
}
}
public void testContext(int position) {
questionSet.testFile(position, context);
//String name = questionSet.getQuestion(position);
//try {
// context.openFileOutput("a.txt", Context.MODE_PRIVATE);
// Toast.makeText(context, name, Toast.LENGTH_SHORT).show();
//}catch(FileNotFoundException e){
// Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show();
//}
}
public void removeAt(int position) {
questionCardList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, questionCardList.size());
}
}