RecyclerView的holder.getAdapterPosition()返回-1。导致ArrayIndexOutOfBoundsException

问题描述 投票:1回答:3

我试图在OnClickListner recyclerView内的项目上添加adapter其余的功能与holder.getAdapterPosition()工作良好,但当我试图实现onClickListner上它显示ArrayIndexOutOfBoundsException错误。我正在使用FlexboxLayoutManager

My_Adapter_Class

public class SuggestedSkillAdapter extends RecyclerView.Adapter<SuggestedSkillAdapter.ViewHolder> {
public List<String> suggestedSkills;
public List<String> filterList;
Context context;
private int itemlayout;
FragOne fragOne;

public SuggestedSkillAdapter(int skill_badge_layout, List<String> suggestedSkills, Context context, FragOne fragOne) {
    this.itemlayout = skill_badge_layout;
    this.context = context;
    this.suggestedSkills = suggestedSkills;
    this.filterList = suggestedSkills;
    this.fragOne = fragOne;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(itemlayout, parent, false);
    ViewHolder myViewHolder = new ViewHolder(view);
    return myViewHolder;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    holder.skillName.setText(suggestedSkills.get(holder.getAdapterPosition()));
    holder.cardView.setOnClickListener(view -> {
        fragOne.addItemToSkillsToBeReviewed(suggestedSkills.get(holder.getAdapterPosition()));
        suggestedSkills.remove(holder.getAdapterPosition());
        notifyItemRemoved(holder.getAdapterPosition());
        Toast.makeText(context, "" + holder.getAdapterPosition(), Toast.LENGTH_SHORT).show();
    });
}

@Override
public int getItemCount() {
    return suggestedSkills.size();
}

@Override
public long getItemId(int position) {
    return super.getItemId(position);
}

public void filterList(ArrayList<String> filterdNames) {
    this.suggestedSkills = filterdNames;
    notifyDataSetChanged();
    notifyItemRangeChanged(0, suggestedSkills.size());
}

public class ViewHolder extends RecyclerView.ViewHolder {
    @BindView(R.id.skillName)
    TextView skillName;
    @BindView(R.id.cardMain)
    CardView cardView;

    public ViewHolder(View itemView) {
        super(itemView);
        ButterKnife.bind(this, itemView);
    }

}
}

Crash_Log

`2019-04-03 11:04:10.774 18117-18117/com.example.addreview D/AndroidRuntime: Shutting down VM
2019-04-03 11:04:10.780 18117-18117/com.example.addreview E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.addreview, PID: 18117
    java.lang.ArrayIndexOutOfBoundsException: length=196; index=-1
        at java.util.ArrayList.get(ArrayList.java:439)
        at com.example.addreview.Adapters.SuggestedSkillAdapter.lambda$onBindViewHolder$0(SuggestedSkillAdapter.java:55)
        at com.example.addreview.Adapters.-$$Lambda$SuggestedSkillAdapter$ib8AJ50Na4r0wQZw7b9CrGCGhkY.onClick(Unknown Source:4)
        at android.view.View.performClick(View.java:6600)
        at android.view.View.performClickInternal(View.java:6577)
        at android.view.View.access$3100(View.java:781)
        at android.view.View$PerformClick.run(View.java:25912)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6912)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860)`

一旦我开始收到错误,我就会检查Toast消息上的位置。但我从相同的方法调用列表的值,并按预期显示值。无法解决为什么它显示-1作为位置。

我期待holder.getAdapterPosition()的确切位置

android android-recyclerview adapter
3个回答
© www.soinside.com 2019 - 2024. All rights reserved.