2017-01-05 64 views
1

如何删除footerLayout中的分隔符行?我在listView下面有一个footerLayout,用于显示totalAmount,如下所示。如果我点击footerLayout中的分隔线,我的应用会崩溃。错误:java.lang.IndexOutOfBoundsException:索引2无效,大小为2

enter image description here

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

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) 

错误指出listViewonClickListener

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.xmlListView,也under_listview.xmlfooterLayout

activity_main

AllAdapter

under_listview

How to move the footerLayout out from the ListView ?

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

enter image description here

但仍然CL可恶!

enter image description here

+0

请分享XML –

+0

@ Swas_99编辑。我有3个XML,一个是activity_main,另一个是适配器,最后是页脚布局xml。让我知道哪个xml。 – Hoo

+0

问题是这样的,页脚是在列表视图中,并且位置大于obj中的对象数量?也许你应该在getItem之前添加一个检查。 – matt

回答

1

The footerLayout is supposed to be displayed outside the listView, not inside.

其实,页脚也是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(); 
      } 
    } 
}); 
+0

谢谢! 'addFooterView(footerLayout,null,false);'做了窍门。 – Hoo

0


只是一个快速教程,如果你是新来定制ListViewAdapters。

我有一个对象Expense这样的:

class Expense { 

    Date date = new Date(); 
    Double spendMoney = 5.0; 
    Bitmap image; 
    ... 

    /** Continue with POJO **/ 
} 

expenses_list_item.xml布局。 (如果您需要帮助,我可以稍后添加它...)


在我的MainActivity我将有一个ArrayList<Expense> expensesList
定制ArrayListAdapter会是这个样子:

class expenseListAdapter extends ArrayAdapter<Expense> { 

    expenseListAdapter() { 
     super(context, R.layout.expenses_list_item, expensesList); 
    } 

    @Override 
    public View getView(int pos, View view, ViewGroup parent) { 
     if (view == null) { 
      view = getActivity().getLayoutInflater().inflate(R.layout.list_item_series, parent, false); 
     } 

     ShowListItem current = expensesList.get(pos); 

     TextView expens = (TextView) view.findViewById(R.id.expenseText); 
     expens.setText(current.getSpendMoney()); 

     ... (all other needed values of your Expense object) 

     return view; 
    } 
} 

最后,我可以只设立

ArrayAdapter<Expense> adapter = new expenseListAdapter(); 
expenseListView.setAdapter(adapter); 

就是这样。第一次看起来可能有点复杂,但这种方法非常强大。如果你需要帮助,不要害怕问;)

电贺 马利克

+0

谢谢,马利克,我拥有所有这些。我会更新我的帖子 – Hoo

+0

已编辑。请检查 – Hoo

1

尝试设置下面一行在你的列表视图。

  android:footerDividersEnabled="false" 
+0

将它添加到您的ListView中xml –

+0

没有工作..再次检查我的帖子 – Hoo

1

我改变了这段代码,现在它工作正常。

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(); 
       } 
      } 
     }); 
相关问题