【发布时间】:2015-11-24 20:07:29
【问题描述】:
每当用户尝试访问列表中的项目时,我的应用程序都会出现问题。此问题仅发生在 5.1 版(Xperia Z2 (D6503)、Z3 Compact Xperia (D5803))的设备上
该应用程序已经过测试并且在版本 (4.1) (4.4) (2.3.3)、(2.3.7)、(4.0.3)、(4.0.4) 上运行良好
错误报告说:
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)
at android.widget.ListView.dispatchDraw(ListView.java:3307)
at android.view.View.draw(View.java:15324)
at android.widget.AbsListView.draw(AbsListView.java:4114)
at android.view.View.updateDisplayListIfDirty(View.java:14257)
at android.view.View.getDisplayList(View.java:14279)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
at android.view.View.updateDisplayListIfDirty(View.java:14217)
at android.view.View.getDisplayList(View.java:14279)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
at android.view.View.updateDisplayListIfDirty(View.java:14217)
at android.view.View.getDisplayList(View.java:14279)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
at android.view.View.updateDisplayListIfDirty(View.java:14217)
at android.view.View.getDisplayList(View.java:14279)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3390)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3369)
at android.view.View.updateDisplayListIfDirty(View.java:14217)
at android.view.View.getDisplayList(View.java:14279)
at android.view.View.draw(View.java:15049)
at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
at android.view.View.updateDisplayListIfDirty(View.java:14252)
at android.view.View.getDisplayList(View.java:14279)
at android.view.View.draw(View.java:15049)
at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
at android.view.View.updateDisplayListIfDirty(View.java:14252)
at android.view.View.getDisplayList(View.java:14279)
at android.view.View.draw(View.java:15049)
at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
at android.view.View.updateDisplayListIfDirty(View.java:14252)
at android.view.View.getDisplayList(View.java:14279)
at android.view.View.draw(View.java:15049)
at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
at android.view.View.updateDisplayListIfDirty(View.java:14252)
at android.view.View.getDisplayList(View.java:14279)
at android.view.View.draw(View.java:15049)
at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
at android.view.View.updateDisplayListIfDirty(View.java:14252)
at android.view.View.getDisplayList(View.java:14279)
at android.view.View.draw(View.java:15049)
at android.view.ViewGroup.drawChild(ViewGroup.java:3406)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3199)
at android.view.View.draw(View.java:15324)
at android.widget.FrameLayout.draw(FrameLayout.java:598)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2653)
at android.view.View.updateDisplayListIfDirty(View.java:14257)
at android.view.View.getDisplayList(View.java:14279)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2540)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2356)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1986)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1065)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5901)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5373)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
我无法完全理解源代码的哪一部分有问题。所以我不知道代码的哪一部分必须贴在这里。有时,用户第一次按下元素列表时可以正常工作,但随后出现错误并且不允许再次访问。
以下代码展示了用户如何访问列表项:
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View viewClicked,
int position, long id) {
itemList currentlog = (itemList )parent.getItemAtPosition(position);
sendToFragmentInterface(currentlog.getUserId());
MyLogs.clear();
}
});
此时,会打开一个包含用户个人资料详细信息的片段。但是,您可以从主菜单访问相同的片段并且运行良好。似乎……只有当您尝试从列表中访问时,应用程序才会崩溃。
这是界面:
public interface openUserProfile {
public void getUserProfile(String user_id);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof openUserProfile ) {
listener = (openUserProfile ) activity;
} else {
throw new ClassCastException(activity.toString()
+ " must implemenet MyListFragment.interfazCambiaFragment");
}
}
public void sendToFragmentInterface(String user_id) {
listener.getUserProfile(user_id);
}
这是 MainActivity 中的代码“getUserProfile”,它持有调用并打开片段:
Bundle args = new Bundle();
Fragment fragment = new UserProfile();
args.putString("user_id",user_id);
fragment.setArguments(args);
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.addToBackStack(null)
.commit();
setTitle("Profile");
该应用程序已经过测试并且在版本 (4.1) (4.4) (2.3.3)、(2.3.7)、(4.0.3)、(4.0.4) 上运行良好 ...谁能告诉我什么发生了什么?
【问题讨论】:
-
错误在
HeaderViewListAdapter:164。你能把这段代码贴出来吗? -
@DeividiCavarzan 我的片段中没有任何标头适配器。 OnCreate 中只有这一行:'header = ((LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.header_profile, null);'
-
当然,我的错,没看到包裹
标签: android android-fragments indexoutofboundsexception