android - Error: java.lang.IndexOutOfBoundsException: Invalid index 2
问题描述
How to remove the seperator line in footerLayout? I have a footerLayout below the listView, used to display the totalAmount as shown below. If I click the seperator line in footerLayout, my app crashed.

My MainActivity
AllAdapter obj = new AllAdapter(getApplication(), search, listview,imageView,text,button);footerLayout = (LinearLayout) getLayoutInflater().inflate(R.layout.under_listview, null);totalAmount = (TextView) footerLayout.findViewById(R.id.amount);
LogCat error
java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) at java.util.ArrayList.get(ArrayList.java:304) at com.example.tony.monthlyexpenses.adapter.AllAdapter.getItem(AllAdapter.java:61) at com.example.tony.monthlyexpenses.QuickExpenses$1.onItemClick(QuickExpenses.java:88) at android.widget.AdapterView.performItemClick(AdapterView.java:301)
The error pointed to listView onClickListener
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> listView, View view, final int position, long id) {mClickedPosition = position;Expenses o = (Expenses) obj.getItem(position);String day = o.getDate(); }});
AllAdapter
public Expenses getItem(int position) {return search.get(position); }
The footerLayout is supposed to be displayed outside the listView, not inside. How can I get rid of this ?
I also have activity_main.xml, AllAdapter class, all_adapter.xml for ListView and also under_listview.xml for the footerLayout.
activity_main
AllAdapter
under_listview
How to move the footerLayout out from the ListView ?
I add android:footerpidersEnabled='false' now become like this

But still clickable !!!
谁知道问题出在哪?

footerLayout被按时如何不出现灰色?

问题解答
回答1:很简单,但也很容易出错的问题,加了footer后,你的listview item数量是3,但adapter的viewcount其实并没有变成3,所以在你点击footer时执行的是obj.getItem(2),肯定是数组越界异常了。对于添加了header或footer的listview,正确的取item方法应该是
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> listView, View view, final int position, long id) {Expenses o = (Expenses) listView.getAdapter().getItem(position);if(o != null){ mClickedPosition = position; //Expenses o = (Expenses) obj.getItem(position); String day = o.getDate();} }});
header或footer属于AdapterView的子view,listView.getAdapter().getItem(position);能确保你取2的position时不越界,再做对象空判断。
回答2:你不能使用setOnItemClickListener 来作为footview的点击事件,我认为你应该单独的去设置例如 footview.setonClickListener(new OnClickListener{}); 祝你好运
回答3:你这个是数组下标越界了啊,你的数组size是2,所以对应的下标只能是0和1,但是你在使用的时候用了2,错误显示你有个无效的index 2,你自己找下第61行和第88行,看是否有地方调用了index是2的
回答4:将footerLayout移出listView的写法是
listview.addFooterView(footerLayout, null, false);
相关文章:
1. jpa mysql 如何id自增初始值?2. javascript - angularJS module之间可以通信吗?3. nginx - 关于vue项目部署到ngnix后出现的问题4. javascript - 怎么才能有效的防止网页被盗?5. javascript - 一个字符串转换成数字,例子就是a="2,322.222",b=’1,211.21’,如何在angualr中执行相减6. javascript - vue使用keep-alive不能保持滚动位置问题。7. python - 有一个函数名(字符串形式),如何能够调用这个函数?8. java - mysql查询,这是怎么查询的呢9. javascript - 问一个有趣的问题: 如何将 数字 转成 金额格式10. MySQL的SELECT...FOR UPDATE究竟起什么作用

 网公网安备
网公网安备