导航抽屉中的Android添加标题会导致应用崩溃

时间:2014-11-13 01:44:45

标签: android arrays android-listview navigation-drawer

我正在尝试在我的应用中使用导航抽屉,例如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];

0 个答案:

没有答案