gpt4 book ai didi

android - ViewHolder ArrayIndexOutOfBoundsException : length=2; index=2

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:37:20 25 4
gpt4 key购买 nike

我尝试使用两种类型的 View 和两种类型的 ViewHolrdes,但收到错误:

java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:6705)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5210)
at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4368)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776)
at android.view.Choreographer.doCallbacks(Choreographer.java:579)
at android.view.Choreographer.doFrame(Choreographer.java:547)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5371)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)

这是我的适配器:

public class FriendsListAdapterFromKesh extends ArrayAdapter<FriendListEntryItem> {
List<FriendListEntryItem> friends;
List<FriendListEntryItem> friendsWithoutPoints;
Context context;
private LayoutInflater inflater;
private LayoutInflater mLayoutInflater;
private static String ROOT_DIRECTORY_PATH = Environment.getExternalStorageDirectory() + File.separator + ".SleepKeeker/Photos old";
FriendsTab friendsTab;

public FriendsListAdapterFromKesh(Context context, final List<FriendListEntryItem> friends, final List<FriendListEntryItem> friendsWithoutPoints) {
super(context, 0);
this.context = context;
inflater = LayoutInflater.from(context);
this.friendsWithoutPoints = friendsWithoutPoints;
this.friends = friends;
friendsTab = new FriendsTab();
mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public void updateList(List<FriendListEntryItem> newlist1, List<FriendListEntryItem> newlist2) {
friends.clear();
friends.addAll(newlist1);
friendsWithoutPoints.clear();
friendsWithoutPoints.addAll(newlist2);
this.notifyDataSetChanged();
}

public List<FriendListEntryItem> getFriends() {
return friends;
}

@Override
public int getCount() {
return friends.size() + friendsWithoutPoints.size();
}

public String getIdSocTypeName(int position) {

if (friends == null || position + 1 >= friends.size()) {
return "";
}
FriendListEntryItem ei = friends.get(position - 1);
return ei.userId + "," + ei.socType + "," + ei.name;
}

static class ViewHolder1 {
public ImageView image = null;
public TextView title = null;
public TextView subtitle = null;
}

static class ViewHolder2 {
public ImageView image;
public TextView title;
public TypefacedButton button;
}

@Override
public int getItemViewType(int pos) {
if (pos < friends.size())
return 1;
return 2;
}

//@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int viewType = getItemViewType(position);
ViewHolder1 viewHolder1 = null;
ViewHolder2 viewHolder2 = null;
if (convertView == null) {
if (viewType == 1) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_frnds_item_with_points, parent, false);
viewHolder1 = new ViewHolder1();
viewHolder1.title = (TextView) convertView.findViewById(R.id.list_item_title_friend);
viewHolder1.image = (ImageView) convertView.findViewById(R.id.imageFriendAva);
viewHolder1.subtitle = (TextView) convertView.findViewById(R.id.list_item_friend_woke_time);
convertView.setTag(viewHolder1);
} else {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_frnds_item_without_points, parent, false);

viewHolder2 = new ViewHolder2();
viewHolder2.title = (TextView) convertView.findViewById(R.id.list_item_title_friend);
viewHolder2.image = (ImageView) convertView.findViewById(R.id.imageFriendAva);
viewHolder2.button = (TypefacedButton) convertView.findViewById(R.id.inviteButton);
viewHolder2.button.setClickListner();
convertView.setTag(viewHolder2);
}

} else {
if (viewType == 1) {
viewHolder1 = (ViewHolder1) convertView.getTag();
} else {
viewHolder2 = (ViewHolder2) convertView.getTag();
}
}
if (viewType == 1) {
final FriendListEntryItem ei = friends.get(position);
viewHolder1.title.setText(ei.name);
viewHolder1.subtitle.setText(ei.wokeTime);
File picture = findPicture(ei.name);
if (picture != null && picture.exists()) {
Picasso.with(context).load("file://" + picture.getAbsolutePath()).fit().centerCrop().into(viewHolder1.image);
}

} else {
final FriendListEntryItem ei2 = friendsWithoutPoints.get(position - friends.size());
viewHolder2.title.setText(ei2.name);
viewHolder2.button.setFriendItem(ei2);
File picture = findPicture(ei2.name);
if (picture != null && picture.exists()) {
Picasso.with(context).load("file://" + picture.getAbsolutePath()).fit().centerCrop().into(viewHolder2.image);
}
}
return convertView;
}
@Override
public int getViewTypeCount() {
return 2;
}

private File findPicture(String name) {
File root = new File(ROOT_DIRECTORY_PATH);
if (root!= null)
{
File[] files = root.listFiles();
if (files == null)
return null;

for (int i = 0; i<files.length; i++) {
Log.d("qedsds", "" + files[i].getName());
if (files[i].getName().contains(name))
return files[i];
}
}
return null;
}
}

滚动列表时出现错误。但我不明白为什么。我已经花了很多时间来解决这个问题,但无济于事

最佳答案

替换

@Override
public int getItemViewType(int pos) {
if (pos < friends.size())
return 1;
return 2;
}

@Override
public int getItemViewType(int pos) {
if (pos < friends.size())
return 0;
return 1;
}

来自 the Adapter documentation for the method getItemViewType (我的重点):

Returns

An integer representing the type of View. Two views should share the same type if one can be converted to the other in getView(int, View, ViewGroup). Note: Integers must be in the range 0 to getViewTypeCount() - 1. IGNORE_ITEM_VIEW_TYPE can also be returned.

此时,您将返回 View 类型的值 1 和 2。您需要返回值 0 和 1 来满足粗体条件。

关于android - ViewHolder ArrayIndexOutOfBoundsException : length=2; index=2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28387892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com