我正在尝试在我的应用中使用导航抽屉,例如g + one,带有分隔符标题和项目列表,但是当我在导航抽屉中添加标题时,应用程序崩溃了。
public static NavigationAdapter getNavigationAdapter(Context context) {
NavigationAdapter navigationAdapter = new NavigationAdapter(context);
String[] menuItems = context.getResources().getStringArray(R.array.nav_menu_items);
for (int i = 0; i < menuItems.length; i++) {
title = menuItems[i];
NavigationItemAdapter itemNavigation;
switch (i) {
/* Viagens */
case 0:
itemNavigation = new NavigationItemAdapter(title, R.drawable.ic_viagens_gray);
navigationAdapter.addItem(itemNavigation);
break;
/* Pedidos */
case 1:
itemNavigation = new NavigationItemAdapter(title, R.drawable.ic_pedidos_gray);
navigationAdapter.addItem(itemNavigation);
break;
/* Clientes */
case 2:
itemNavigation = new NavigationItemAdapter(title, R.drawable.ic_clientes_gray);
navigationAdapter.addItem(itemNavigation);
break;
/* Configurações */
case 3:
navigationAdapter.addHeader("MENU");
itemNavigation = new NavigationItemAdapter(title, R.drawable.ic_viagens_gray);
navigationAdapter.addItem(itemNavigation);
break;
/* Trocar Usuário */
case 4:
itemNavigation = new NavigationItemAdapter(title, R.drawable.ic_pedidos_gray);
navigationAdapter.addItem(itemNavigation);
break;
}
}
return navigationAdapter;
}
NavigationAdapter:
public class NavigationAdapter extends ArrayAdapter<NavigationItemAdapter> {
private ViewHolder holder;
private HashSet<Integer> checkedItems;
public NavigationAdapter(Context context) {
super(context, 0);
this.checkedItems = new HashSet<Integer>();
}
public void addHeader(String title) {
add(new NavigationItemAdapter(title, 0, true));
}
public void addItem(String title, int icon) {
add(new NavigationItemAdapter(title, icon, false));
}
public void addItem(NavigationItemAdapter itemModel) {
add(itemModel);
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return getItem(position).isHeader ? 0 : 1;
}
@Override
public boolean isEnabled(int position) {
return !getItem(position).isHeader;
}
public void setChecked(int pos, boolean checked)
{
if (checked) {
this.checkedItems.add(Integer.valueOf(pos));
} else {
this.checkedItems.remove(Integer.valueOf(pos));
}
this.notifyDataSetChanged();
}
public void resetarCheck()
{
this.checkedItems.clear();
this.notifyDataSetChanged();
}
public static class ViewHolder {
public final ImageView icon;
public final TextView title;
public final TextView counter;
public final LinearLayout colorLinear;
public final View viewNavigation;
public ViewHolder(TextView title, TextView counter, ImageView icon, LinearLayout colorLinear, View viewNavigation) {
this.title = title;
this.counter = counter;
this.icon = icon;
this.colorLinear = colorLinear;
this.viewNavigation = viewNavigation;
}
}
public View getView(int position, View convertView, ViewGroup parent) {
holder = null;
View view = convertView;
NavigationItemAdapter item = getItem(position);
if (view == null) {
int layout = 0;
layout = R.layout.navigation_item_counter;
if (item.isHeader){
layout = R.layout.navigation_header_title;
}
view = LayoutInflater.from(getContext()).inflate(layout, null);
TextView txttitle = (TextView) view.findViewById(R.id.title);
TextView txtcounter = (TextView) view.findViewById(R.id.counter);
ImageView imgIcon = (ImageView) view.findViewById(R.id.icon);
View viewNavigation = (View) view.findViewById(R.id.viewNavigation);
LinearLayout linearColor = (LinearLayout) view.findViewById(R.id.ns_menu_row);
view.setTag(new ViewHolder(txttitle, txtcounter, imgIcon, linearColor, viewNavigation));
}
if (holder == null && view != null) {
Object tag = view.getTag();
if (tag instanceof ViewHolder) {
holder = (ViewHolder) tag;
}
}
if (item != null && holder != null) {
if (holder.title != null)
holder.title.setText(item.title);
if (holder.counter != null) {
if (item.counter > 0) {
holder.counter.setVisibility(View.VISIBLE);
int counter = ((NavigationMain)getContext()).getCounterItemDownloads();
holder.counter.setText("" + counter);
} else {
holder.counter.setVisibility(View.GONE);
}
}
if (holder.icon != null) {
if (item.icon != 0) {
holder.icon.setVisibility(View.VISIBLE);
holder.icon.setImageResource(item.icon);
} else {
holder.icon.setVisibility(View.GONE);
}
}
}
if (!item.isHeader) {
if (checkedItems.contains(Integer.valueOf(position))) {
holder.viewNavigation.setVisibility(View.VISIBLE);
} else {
holder.viewNavigation.setVisibility(View.GONE);
}
view.setBackgroundResource(R.drawable.seletor_item_navigation);
}
return view;
}
}
点击监听器:
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int posicao, long id) {
layoutDrawer.closeDrawer(linearDrawer);
setLastPosition(posicao);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
setFragmentList(lastPosition);
}
}, 350);
SecurePreferences mSessao = new SecurePreferences(getApplicationContext(), "sessao");
mSessao.put("menuAtual", getPosicaoDoMenu(posicao, getApplicationContext()));
}
}
public String getPosicaoDoMenu(int posicao, Context context) {
String[] menuItems = context.getResources().getStringArray(R.array.nav_menu_items);
return menuItems[posicao];
}
这是LOG正在打印的内容:
Process: br.com, PID: 14421
java.lang.ArrayIndexOutOfBoundsException: length=5; index=5
at br.com.NavigationMain.getPosicaoDoMenu(NavigationMain.java:254)
at br.com.NavigationMain$DrawerItemClickListener.onItemClick(NavigationMain.java:300)
NavigationMain.java:254&gt;&gt;&gt;&gt;&gt;&gt; return menuItems [posicao];