Android java.lang.ArrayIndexOutOfBoundsException:长度=12;recyclerview适配器中的索引=-1
我使用的是回收者视图。 这是适配器Android java.lang.ArrayIndexOutOfBoundsException:长度=12;recyclerview适配器中的索引=-1,android,indexoutofboundsexception,android-recyclerview,Android,Indexoutofboundsexception,Android Recyclerview,我使用的是回收者视图。 这是适配器 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<Contact> myContacts; private Activity activity; public MyAdapter(List<Contact> contacts,Activity activity) { this.myCont
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<Contact> myContacts;
private Activity activity;
public MyAdapter(List<Contact> contacts,Activity activity)
{
this.myContacts = contacts;
this.activity = activity;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ImageView mColorView;
public LinearLayout linearLayout;
public ViewHolder(View v,MyAdapter adapter) {
super(v);
mTextView = v.findViewById(R.id.name);
mColorView = v.findViewById(R.id.image);
linearLayout = v.findViewById(R.id.listItemLinearLayout);
v.setOnLongClickListener(onLongClickListener(myContacts.get(getAdapterPosition()).getID(),getAdapterPosition(),adapter));
}
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_text_view, parent, false);
// set the view's size, margins, paddings and layout parameters
ViewHolder vh = new ViewHolder(v,this);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String name = myContacts.get(position).getName();
TextDrawable myDrawable = TextDrawable.builder().beginConfig()
.textColor(Color.WHITE)
.useFont(Typeface.DEFAULT)
.toUpperCase()
.endConfig()
.buildRound(name.substring(0,1),myContacts.get(position).getColor());
holder.mColorView.setImageDrawable(myDrawable);
holder.mTextView.setText(myContacts.get(position).getName());
holder.linearLayout.setBackgroundColor(Color.DKGRAY);
}
private View.OnLongClickListener onLongClickListener(final long position, final int pos,final MyAdapter adapter){
return new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity, R.style.MyDialogTheme);
alertDialog.setCancelable(false);
alertDialog.setMessage("Delete item?");
alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
LockedContacts.deleteTitle(position,activity);
myContacts.remove(pos);
notifyItemRemoved(pos);
notifyItemRangeChanged(pos, myContacts.size());
}
});
alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alert11 = alertDialog.create();
alert11.show();
return true;
}
};
}
@Override
public int getItemCount() {
Log.d("SIZE",String.valueOf(myContacts.size()));
return myContacts.size();
}}
公共类MyAdapter扩展了RecyclerView.Adapter{
私人清单;
私人活动;
公共MyAdapter(列出联系人、活动)
{
this.myContacts=联系人;
这个。活动=活动;
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图mTextView;
公共图像视图mColorView;
公共线性布局线性布局;
公共视图持有者(视图v,MyAdapter适配器){
超级(五);
mTextView=v.findviewbyd(R.id.name);
mColorView=v.findviewbyd(R.id.image);
linearLayout=v.findViewById(R.id.listItemLinearLayout);
v、 setOnLongClickListener(onLongClickListener(myContacts.get(getAdapterPosition()).getID(),getAdapterPosition(),adapter));
}
}
@凌驾
public MyAdapter.ViewHolder onCreateViewHolder(视图组父级,
int视图类型){
//创建新视图
视图v=LayoutInflater.from(parent.getContext())
.充气(R.layout.my_text_视图,父视图,false);
//设置视图的大小、边距、填充和布局参数
ViewHolder vh=新的ViewHolder(v,this);
返回vh;
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
String name=myContacts.get(position.getName();
TextDrawable myDrawable=TextDrawable.builder().beginConfig()
.textColor(颜色.白色)
.useFont(Typeface.DEFAULT)
.toUpperCase()
.endConfig()
.buildRound(name.substring(0,1),myContacts.get(position.getColor());
持有者.mColorView.setImageDrawable(myDrawable);
holder.mTextView.setText(myContacts.get(position.getName());
支架。线性布局。立根基色(颜色:DK灰色);
}
private View.OnLongClickListener OnLongClickListener(最终长位置、最终整型位置、最终MyAdapter适配器){
返回新视图。OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图v){
AlertDialog.Builder AlertDialog=新建AlertDialog.Builder(活动,R.style.MyDialogTheme);
alertDialog.setCancelable(假);
alertDialog.setMessage(“删除项?”);
alertDialog.setPositiveButton(“是”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
锁定联系人。删除标题(职位、活动);
myContacts.remove(位置);
已删除的项目(pos);
notifyItemRangeChanged(pos,myContacts.size());
}
});
alertDialog.setNegativeButton(“取消”,新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
dialog.cancel();
}
});
AlertDialog alert11=AlertDialog.create();
alert11.show();
返回true;
}
};
}
@凌驾
public int getItemCount(){
Log.d(“SIZE”,String.valueOf(myContacts.SIZE());
返回myContacts.size();
}}
我得到IndexOutofBoundException,尽管我没有在列表中插入任何项目
以下是错误:
Process: com.example.ark.AccessibilityService, PID: 17104
java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
at java.util.ArrayList.get(ArrayList.java:310)
at com.example.ark.access.MyAdapter$ViewHolder.<init>(MyAdapter.java:46)
at com.example.ark.access.MyAdapter.onCreateViewHolder(MyAdapter.java:57)
at com.example.ark.access.MyAdapter.onCreateViewHolder(MyAdapter.java:27)
at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6493)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5680)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5563)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5559)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2229)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1556)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1516)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:608)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3693)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3410)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3962)
at android.view.View.layout(View.java:16668)
at android.view.ViewGroup.layout(ViewGroup.java:5443)
at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:132)
at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1361)
at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:869)
at android.view.View.layout(View.java:16668)
at android.view.ViewGroup.layout(ViewGroup.java:5443)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16668)
at android.view.ViewGroup.layout(ViewGroup.java:5443)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16668)
at android.view.ViewGroup.layout(ViewGroup.java:5443)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16668)
at android.view.ViewGroup.layout(ViewGroup.java:5443)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16668)
at android.view.ViewGroup.layout(ViewGroup.java:5443)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16668)
at android.view.ViewGroup.layout(ViewGroup.java:5443)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2733)
at android.view.View.layout(View.java:16668)
at android.view.ViewGroup.layout(ViewGroup.java:5443)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6042)
android.view.Choreographer$CallbackReco
Process:com.example.ark.AccessibilityService,PID:17104
java.lang.ArrayIndexOutOfBoundsException:长度=12;索引=-1
获取(ArrayList.java:310)
在com.example.ark.access.MyAdapter$ViewHolder上。(MyAdapter.java:46)
位于com.example.ark.access.MyAdapter.onCreateViewHolder(MyAdapter.java:57)
位于com.example.ark.access.MyAdapter.onCreateViewHolder(MyAdapter.java:27)
位于android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6493)
在android.support.v7.widget.RecyclerView$Recycler.TryGetViewHolderFormationByDaildate(RecyclerView.java:5680)上
位于android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5563)
位于android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5559)
位于android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2229)
位于android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1556)
位于android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1516)
位于android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:608)
位于android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3693)
位于android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3410)
位于android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3962)
在android.view.view.layout(view.java:16668)
位于android.view.ViewGroup.layout(ViewGroup.java:5443)
位于android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:132)
位于android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
位于android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1361)
位于android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:869)
在android.view.view.layout(view.java:16668)
位于android.view.ViewGroup.layout(ViewGroup.java:5443)
位于android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
位于android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
位于android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
在android.view.view.layout(view.java:16668)
位于android.view.ViewGroup.layout(ViewGroup.java:5443)
位于android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
位于android.widget.FrameLayout.onLayout(FrameLayout.java:273)
在android.view.view.layout(view.java:16668)
位于android.view.ViewGroup.layout(ViewGroup.java:5443)
在android.widget.LinearLayout.setChildFrame(LinearLay
v.setOnLongClickListener(onLongClickListener(myContacts.get(getAdapterPosition()).getID(),getAdapterPosition(),adapter));
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener {
public TextView mTextView;
public ImageView mColorView;
public LinearLayout linearLayout;
public ViewHolder(View v,MyAdapter adapter) {
super(v);
mTextView = v.findViewById(R.id.name);
mColorView = v.findViewById(R.id.image);
linearLayout = v.findViewById(R.id.listItemLinearLayout);
v.setOnLongClickListener(this);
}
@Override
public boolean onLongClick(View v) {
if(getAdapterPosition()!=-1) {
// Do your stuff here
onLongClickListener(myContacts.get(getAdapterPosition()).getID(), getAdapterPosition(), adapter)
}
return false;
}
}