Android:带有自定义适配器onItemClickListener的导航抽屉

时间:2014-02-15 15:20:20

标签: java android android-listview navigation-drawer

我一直在尝试为BaseAdapter派生的导航抽屉设置自定义ListView适配器,所以当我设置OnItemClickListener时,它对ListView.OnItemClickListenerAdapterView.OnItemClickListener都不起作用

用Google搜索,但所有示例都来自ArrayAdapter,因为BaseAdapter需要。 任何人都可以帮我吗?

NavigationDrawer片段onCreateView

drawerItems = new ArrayList<DrawerItem>();
drawerItems.add(DrawerItem.create(1, getString(R.string.ideas), getDrawable(R.drawable.ic_action_diamond)));
drawerItems.add(DrawerItem.create(2, getString(R.string.categories), getDrawable(R.drawable.ic_action_categories)));
drawerItems.add(DrawerItem.create(3, getString(R.string.priorities), getDrawable(R.drawable.ic_action_priorities)));

mDrawerListAdapter = MenuAdapter.newInstance(getActivity(), drawerItems);
mDrawerListView.setItemsCanFocus(true);

mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Log.d(TAG, String.valueOf(position));
                selectItem(position);
    }
});

mDrawerListView.setAdapter(mDrawerListAdapter);
mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);

我的自定义适配器

public class MenuAdapter extends BaseAdapter {
    private static final String TAG = "AD:MENU";

    private final LayoutInflater mLayoutInflater;
    private List<DrawerItem> items;
    private Context context;

    public MenuAdapter(Context ctx, List<DrawerItem> items) {
        this.items = items;
        this.context = ctx;
        this.mLayoutInflater = LayoutInflater.from(ctx);
    }

    public static MenuAdapter newInstance(Context ctx, List<DrawerItem> items) {
        return new MenuAdapter(ctx, items);
    }

    @Override
    public int getCount() {
        return items == null ? 0 : items.size();
    }

    @Override
    public Object getItem(int position) {
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View v, ViewGroup parent) {
        DrawerItem item = (DrawerItem) getItem(position);
        ViewHolder holder;

        if (v == null) {
            v = mLayoutInflater.inflate(R.layout.drawable_item, parent, false);
            holder = new ViewHolder();

            if (v != null) {
                holder.title = (TextView) v.findViewById(R.id.menu_title);

                holder.title.setTag(item.id);
                v.setTag(holder);
            }
        } else {
            holder = (ViewHolder) v.getTag();
        }

        holder.title.setText(item.title);
        holder.title.setCompoundDrawablesWithIntrinsicBounds(item.icon, null, null, null);

        Log.d(TAG, item.title);

        return v;
    }

    public class ViewHolder {
        TextView title;
    }

}

0 个答案:

没有答案