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

错误:java.lang.IndexOutOfBoundsException:索引2无效,大小为2,java,android,listview,Java,Android,Listview,如何删除footerLayout中的分隔符行?我在listView下面有一个footerLayout,用于显示总额,如下所示。如果我单击footerLayout中的分隔符行,我的应用程序就会崩溃 我的主要活动 LogCat错误 错误指向listView onClickListener 页脚布局应该显示在listView外部,而不是内部。我怎样才能摆脱这个 我还有activity_main.xml、AllAdapter类、用于ListView的all_adapter.xml以及用于footerLa

如何删除footerLayout中的分隔符行?我在listView下面有一个footerLayout,用于显示总额,如下所示。如果我单击footerLayout中的分隔符行,我的应用程序就会崩溃

我的主要活动

LogCat错误

错误指向listView onClickListener

页脚布局应该显示在listView外部,而不是内部。我怎样才能摆脱这个

我还有activity_main.xml、AllAdapter类、用于ListView的all_adapter.xml以及用于footerLayout的_ListView.xml下面的内容

如何将页脚布局从ListView移出

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

但是仍然可以点击

如果您不熟悉自定义ListViewAdapters,请参阅快速教程

我会有这样一个对象费用:

class Expense {

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

  /** Continue with POJO **/
}
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;
    }
}
以及一个expenses\u list\u item.xml布局。如果你需要帮助,我可以稍后再加上

在我的主要活动中,我会有一个ArrayList expensesList 我的定制ArrayListAdapter看起来像这样:

class Expense {

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

  /** Continue with POJO **/
}
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);
就是这样。乍一看可能有点复杂,但这种方法非常强大。如果你需要帮助,不要害怕问

问候 如果您不熟悉自定义ListViewAdapters,Malik只是一个快速教程

我会有这样一个对象费用:

class Expense {

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

  /** Continue with POJO **/
}
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;
    }
}
以及一个expenses\u list\u item.xml布局。如果你需要帮助,我可以稍后再加上

在我的主要活动中,我会有一个ArrayList expensesList 我的定制ArrayListAdapter看起来像这样:

class Expense {

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

  /** Continue with POJO **/
}
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);
就是这样。乍一看可能有点复杂,但这种方法非常强大。如果你需要帮助,不要害怕问

问候
Malik

尝试在listview中设置以下行

            android:footerDividersEnabled="false"

尝试在listview中设置以下行

            android:footerDividersEnabled="false"

我更改了这个代码,现在它可以正常工作了

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();
                }
            }
        });

我更改了这个代码,现在它可以正常工作了

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();
                }
            }
        });
页脚布局应该显示在listView之外,而不是 里面

实际上,页脚也是ListView的一部分,它将列表中的项目数相加。然而,有几种方法可以忽略页脚视图上的单击事件

一种选择是,不使用以下方式添加视图: addFooterViewfooterLayout;, 使用: addFooterViewfooterLayout,null,false

第三个参数指定是否显示页脚视图

另一个选项是在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();
          }
     }
 });
页脚布局应该显示在listView之外,而不是 里面

实际上,页脚也是ListView的一部分,它将列表中的项目数相加。然而,有几种方法可以忽略页脚视图上的单击事件

一种选择是,不使用以下方式添加视图: addFooterViewfooterLayout;, 使用: addFooterViewfooterLayout,null,false

第三个参数指定是否显示页脚视图

另一个选项是在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();
          }
     }
 });

请分享xml@Swas_99编辑。我有3个xml,一个是activity_main,另一个是adapter,最后是页脚布局xml。让我知道是哪个xml。问题是,页脚在列表视图中,位置大于obj中的对象数?也许您应该在执行getItem之前添加一个复选框。@matt我如何才能将footerLayout从listview移出?可能重复的请共享xml@Swas_99编辑。我有3个xml,一个是activity_main,另一个是adapter,最后是页脚布局xml。让我知道是哪个xml。问题是,页脚在列表视图中,位置大于obj中的对象数?也许您应该在执行getItem之前添加一个复选框。@matt我怎样才能将页脚布局从listview中移出?可能是重复的谢谢,Malik,我有所有这些。我将更新我的postEdited。请核对一下谢谢,马利克,这些我都有。我将更新我的postEdited。请选中将其添加到XML中的ListView将其添加到XML中的ListView谢谢!addFooterViewfooterLayout,null,false;玩了这些把戏。谢谢!addFooterViewfooterLayout,null,false;他耍了些花招。