【发布时间】:2015-12-20 20:28:22
【问题描述】:
我正在使用HeaderListView,当您尝试访问任何数组的-1 位置时,我得到了ArrayIndexOutOfBoundsException。但这是我的意思,我在框架代码中遇到了这个错误,更准确地说是这一行:
boolean prevHasRows = mAdapter.numberOfRows(actualSection - 1) > 0;
我试图破解它并输入如下内容:
boolean prevHasRows = mAdapter.numberOfRows(actualSection - 1) > 0;
这里我没有更多的ArrayIndexOutOfBoundsException,但是当我有一个足够大的列表可以滚动时,最少的项目被弄乱了,我从第一部分到最后一个部分。
这是我的代码:
我设置适配器的片段:
import android.content.Context;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import br.com.soutsapp.souts.R;
import br.com.soutsapp.souts.model.Menu;
import br.com.soutsapp.souts.model.Product;
import br.com.soutsapp.souts.model.modelview.OrderItem;
import br.com.soutsapp.souts.userInterface.adapter.SectionAdapter;
import br.com.soutsapp.souts.userInterface.controls.HeaderListView;
public class MenuFragment extends Fragment {
private Context mContext;
private List<OrderItem> itens;
private Menu menu;
public MenuFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_menu, container, false);
mContext = getContext();
itens = new ArrayList<>();
menu = new Menu();
setUpCardListView(v);
return v;
}
private void setUpCardListView(View v){
HeaderListView list = (HeaderListView) v.findViewById(R.id.hlv_card_items);
list.setAdapter(new SectionAdapter() {
@Override
public int numberOfSections() {
return menu.getMenuSessions().size();
}
@Override
public int numberOfRows(int section) {
return menu.getMenuSessions().get(section).size();
}
@Override
public Object getRowItem(int section, int row) {
return menu.getMenuSessions().get(section).get(row);
}
@Override
public boolean hasSectionHeaderView(int section) {
return true;
}
@Override
public View getRowView(final int section, final int row, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(getResources().getLayout(R.layout.menu_item_row), null);
TextView tvMenuItemName = (TextView) convertView.findViewById(R.id.tv_menu_item_name);
TextView tvMenuItemPrice = (TextView) convertView.findViewById(R.id.tv_price);
String itemName = menu.getMenuSessions().get(section).get(row).getName();
tvMenuItemName.setText(itemName);
String itemPrice = String.valueOf(menu.getMenuSessions().get(section).get(row).getPrice());
tvMenuItemPrice.setText(itemPrice);
TextView tvQuantity = (TextView) convertView.findViewById(R.id.tv_quantity);
tvQuantity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView tvQuantity = (TextView) v;
Product product = (Product) getRowItem(section, row);
if (tvQuantity.getText().equals("1") && !tvQuantity.getText().equals("")){
tvQuantity.setText("");
OrderItem itenToRemove = null;
for(OrderItem item: itens){
if(item.getProductId() == product.getId()){
itenToRemove = item;
break;
}
}
itens.remove(itenToRemove);
}
else{
for(OrderItem item: itens){
if(item.getProductId() == product.getId()){
int quantity = item.getQuantity();
item.setQuantity(--quantity);
tvQuantity.setText(String.valueOf(item.getQuantity()));
break;
}
}
}
}
});
}
return convertView;
}
@Override
public int getSectionHeaderViewTypeCount() {
return 1;
}
@Override
public View getSectionHeaderView(int section, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(getResources().getLayout(android.R.layout.simple_list_item_1), null);
}
switch (section) {
case 0:
((TextView) convertView).setText("Bebidas");
convertView.setBackgroundColor(getResources().getColor(R.color.Blue_Jay));
break;
case 1:
((TextView) convertView).setText("Comidas");
convertView.setBackgroundColor(getResources().getColor(R.color.Red_Wine));
break;
case 2:
((TextView) convertView).setText("Diversos");
convertView.setBackgroundColor(getResources().getColor(R.color.Camel_brown));
break;
}
return convertView;
}
@Override
public void onRowItemClick(AdapterView<?> parent, View view, int section, int row, long id) {
super.onRowItemClick(parent, view, section, row, id);
TextView tvQuantity = (TextView) view.findViewById(R.id.tv_quantity);
Product p = (Product) getRowItem(section, row);
boolean exist = false;
for(OrderItem item : itens){
if(item.getProductId() == p.getId()){
int actualQuantity = item.getQuantity();
item.setQuantity(++actualQuantity);
tvQuantity.setText(String.valueOf(item.getQuantity()));
exist = true;
}
}
if(!exist){
itens.add(new OrderItem(p.getId(), 1));
tvQuantity.setText("1");
}
}
});
}
}
提前谢谢各位!
【问题讨论】:
标签: java android listview android-listview header