Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么getAdapterPosition()每(比如)5秒就卡在单击的第一个视图上?_Java_Android_Class_Android Recyclerview_Adapter - Fatal编程技术网

Java 为什么getAdapterPosition()每(比如)5秒就卡在单击的第一个视图上?

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张连续的牌是错误的,而

我有一个RecyclerView类(QuestionCardAdapter),它将SpanishQuestionSet的所有项显示为CardView

一切都很正常(例如,我可以在点击一张卡片时,弹出“勾选”和“交叉”按钮,并在点击时移除卡片)

然而,最近我想通过点击按钮(vCross或VTick)来修改作为SpanishQuestionSet一部分的数组(即数组中的项为+1表示错误,为-1表示正确,因此我使用的降序快速排序将导致错误回答的问题位于顶部)

然而,每当我说点击4张连续的牌是错误的,而不是每张牌的分数增加1,4的分数的第一张牌增加4。getAdapterPosition()似乎已延迟。它会受到我添加的时间限制变量的影响吗?这样,如果有人在卡片移除动画完成之前双击按钮,应用程序就不会崩溃

任何帮助都将不胜感激,我将在下面介绍adapter和SpanishQuestionSet类

适配器类很可能是重点

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());
}


}