如何删除footerLayout中的分隔线?我在footerLayout下有一个listView,用于显示totalAmount,如下所示。如果单击footerLayout中的分隔线,则我的应用程序崩溃了。

java - 错误:java.lang.IndexOutOfBoundsException:无效的索引2,大小为2-LMLPHP

我的主要活动

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错误

 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)


错误指向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);
    }


footerLayout应该显示在listView外部,而不是内部。我该如何摆脱呢?

我也有activity_main.xmlAllAdapter类,对于all_adapter.xml使用ListView,对于under_listview.xml也使用footerLayout

activity_main

AllAdapter

under_listview


  如何将footerLayout从ListView中移出?


我添加android:footerDividersEnabled="false"现在变成这样

java - 错误:java.lang.IndexOutOfBoundsException:无效的索引2,大小为2-LMLPHP

但是仍然可以点击!

java - 错误:java.lang.IndexOutOfBoundsException:无效的索引2,大小为2-LMLPHP

最佳答案

footerLayout应该显示在listView之外,而不是
  内。


实际上,页脚也是ListView的一部分,它累加了列表中的项数。没什么,有几种方法可以忽略页脚视图上的单击事件。

一种选择是代替使用以下方法添加视图:
addFooterView(footerLayout);
采用:
addFooterView(footerLayout, null, false);

第三个参数指定是否在页脚视图should be selectable

另一种选择是当position参数大于适配器数据集的大小时忽略单击:

 listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
     public void onItemClick(AdapterView<?> listView, View view, final int position, long id) {
          if(position < adapter.getCount()){
              Expenses expenses = (Expenses) adapter.getItem(position);
              String day = expenses.getDate();
          }
     }
 });

09-05 17:47