0
我得到java.lang.IndexOutOfBoundsException:索引2无效,当我到达最后一页并尝试从列表视图中删除页脚视图时,大小为2。有人可以帮我解决这个问题。如何在Android分页完成后从listview中删除foorterview?
这里是添加页脚视图到列表视图的代码。
listView = (ListView)findViewById(R.id.listview_AllPost);
footer = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.prohressbar, listView, false);
rLayout = (RelativeLayout) footer.findViewById(R.id.progressRel);
progressBar = (ProgressBar) footer.findViewById(R.id.progressBar);
btnLoadMore = (Button) footer.findViewById(R.id.btnLoadMore);
btnLoadMore.getLayoutParams().height = 0;
progressBar.getLayoutParams().height = 130;
btnLoadMore.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);
这是我的分页方法。
filter_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String selectedFromList = (filter_list.getItemAtPosition(position).toString());
if (selectedFromList.equals("My Post")) {
populate_MyAllPostList(OFFSET);
btnLoadMore.setVisibility(View.GONE);
LoginUser_PostLoacalPages();
}
if (selectedFromList.equals("All Post")) {
populateList(OFFSET);
progressBar.setVisibility(View.VISIBLE);
Pegination();
}
if (selectedFromList.equals("R-Post")) {
populate_StarPost(OFFSET);
progressBar.setVisibility(View.VISIBLE);
R_Post_Pagination();
} }
});
这是我的分页代码。
public void LoginUser_PostLoacalPages() {
listView.removeFooterView(footer);
listView.addFooterView(footer);
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
private int total;
@Override
public void onScrollStateChanged(AbsListView absListView, int scrollState) {
}
@Override
public void onScroll(AbsListView absListView, int firstItem, int visibleItemCount, final int totalItems) {
total = firstItem + visibleItemCount;
if (totalItems > 0 && total > 0 && total == totalItems)
{
if (preLast != total)
{
if (pageCount < MyPost_LocalPages)
{
Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
public void run() {
pageCount++;
int OFFSET_SCROLL = 50;
List<All_Post> allDesc = dbhelper.getMyAllPost(str_LoginUserId, OFFSET_SCROLL);
for (All_Post all_Post : allDesc) {
descArray.add(all_Post);
}
if (adapter != null) {
adapter.notifyDataSetChanged();
listView.setAdapter(adapter);
listView.setSelection(totalItems);
}
}
}, 2500);
}
preLast = total;
}
preLast = total;
if (pageCount == MyPost_LocalPages)
{
if (preLast == total)
{
Log.e("", "pageCount preLast=" + pageCount + " MyPost_LocalPages=" + MyPost_LocalPages);
listView.removeFooterView(footer);
pageCount = 0;
}
}
}
}
});
}
public void R_Post_Pagination()
{
listView.removeFooterView(footer);
btnLoadMore.setVisibility(View.GONE);
listView.addFooterView(footer);
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
private int total;
@Override
public void onScrollStateChanged(AbsListView absListView, int scrollState) {
}
@Override
public void onScroll(AbsListView absListView, int firstItem, int visibleItemCount, final int totalItems) {
total = firstItem + visibleItemCount;
if (totalItems > 0 && total > 0 && total == totalItems) {
if (preLast != total) {
if (R_PageCount < R_Post_LocalPages) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
R_PageCount++;
int OFFSET_SCROLL = 50;
List<All_Post> allDesc = dbhelper.getMyAll_StarPost(OFFSET_SCROLL);
for (All_Post all_Post : allDesc) {
descArray.add(all_Post);
}
if (adapter != null) {
adapter.notifyDataSetChanged();
listView.setAdapter(adapter);
listView.setSelection(totalItems);
}
}
}, 2500);
}
preLast = total;
}
preLast = total;
if (R_PageCount == R_Post_LocalPages) {
if (preLast == total)
{
Log.e("", "pageCount preLast=" + R_PageCount + " R_Post_LocalPages=" + R_Post_LocalPages);
listView.removeFooterView(footer);
R_PageCount = 0;
}
}
}
}
});
}
这里是日志猫的错误信息。
java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
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:3334)
at android.view.View.draw(View.java:15364)
at android.widget.AbsListView.draw(AbsListView.java:4434)
at android.view.View.updateDisplayListIfDirty(View.java:14242)
at android.view.View.getDisplayList(View.java:14272)
at android.view.View.draw(View.java:15057)
at android.view.ViewGroup.drawChild(ViewGroup.java:3528)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3322)
at android.view.View.draw(View.java:15364)
at android.view.View.updateDisplayListIfDirty(View.java:14242)
at android.view.View.getDisplayList(View.java:14272)
at android.view.View.draw(View.java:15057)
at android.view.ViewGroup.drawChild(ViewGroup.java:3528)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3322)
at android.view.View.updateDisplayListIfDirty(View.java:14234)
at android.view.View.getDisplayList(View.java:14272)
at android.view.View.draw(View.java:15057)
at android.view.ViewGroup.drawChild(ViewGroup.java:3528)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3322)
at android.view.View.updateDisplayListIfDirty(View.java:14234)
at android.view.View.getDisplayList(View.java:14272)
at android.view.View.draw(View.java:15057)
at android.view.ViewGroup.drawChild(ViewGroup.java:3528)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3322)
at android.view.View.updateDisplayListIfDirty(View.java:14234)
at android.view.View.getDisplayList(View.java:14272)
at android.view.View.draw(View.java:15057)
at android.view.ViewGroup.drawChild(ViewGroup.java:3528)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3322)
at android.view.View.updateDisplayListIfDirty(View.java:14234)
at android.view.View.getDisplayList(View.java:14272)
at android.view.View.draw(View.java:15057)
at android.view.ViewGroup.drawChild(ViewGroup.java:3528)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3322)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchDraw(PhoneWindow.java:2845)
at android.view.View.draw(View.java:15364)
at android.widget.FrameLayout.draw(FrameLayout.java:647)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2824)
at android.view.View.updateDisplayListIfDirty(View.java:14242)
at android.view.View.getDisplayList(View.java:14272)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:267)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:273)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:312)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2852)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2689)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2313)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1251)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6438)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:795)
at android.view.Choreographer.doCallbacks(Choreographer.java:598)
at android.view.Choreographer.doFrame(Choreographer.java:567)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:781)
at android.os.Handler.handleCallback(Handler.java:810)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:189)
at android.app.ActivityThread.main(ActivityThread.java:5529)
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:950)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
这是哪行HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)? –
listView.removeFooterView(footer);显示// Footer(禁止位置将抛出IndexOutOfBoundsException) 返回mFooterViewInfos.get(adjPosition - adapterCount).isSeableable;但不是在我的代码中的任何地方。我只是在logcat android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)中的lerror行上点击它,并且它转到该headerViewListAdapter.java类 – jandroid