2017-01-05 77 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(); 
       } 
      } 
     }); 
相關問題