Настройка пользовательского адаптера для Navigation Drawer

Я пытаюсь использовать свой собственный адаптер с ящиком навигации, но не знаю, как его добавить, чтобы он мог его использовать.

любые рекомендации будут оценены, спасибо.

Это мой пользовательский адаптер:

private class SampleItem {
    public String tag;
    public int iconRes;

    public SampleItem(String tag, int iconRes) {
        this.tag = tag;
        this.iconRes = iconRes;
    }
}

public class SampleAdapter extends ArrayAdapter<SampleItem> {

    public SampleAdapter(Context context) {
        super(context, 0);
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(
                    R.layout.row, null);
        }
        ImageView icon = (ImageView) convertView
                .findViewById(R.id.ImageNavDrawer);
        icon.setImageResource(getItem(position).iconRes);
        TextView title = (TextView) convertView
                .findViewById(R.id.NavListTextview);
        title.setText(getItem(position).tag);

        return convertView;
    }

}

Как устроен ящик:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    mDrawerListView = (ListView) inflater.inflate(
            R.layout.fragment_navigation_drawer, container, false);
    mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            selectItem(position);
        }
    });
    mDrawerListView.setAdapter(new ArrayAdapter<String>(
            getActionBar().getThemedContext(),
            R.layout.row,
            R.id.NavListTextview,
            new String[]{
                    getString(R.string.1),
                    getString(R.string.2),
                    getString(R.string.3),
            }));
    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
    return mDrawerListView;
}

Как я использовал адаптер в других проектах:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    return inflater.inflate(R.layout.list, null);

}

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    SampleAdapter adapter = new SampleAdapter(getActivity());
    {

        adapter.add(new SampleItem("Archietecture",
                R.drawable.archietecture));
        adapter.add(new SampleItem("Art", R.drawable.art));
        adapter.add(new SampleItem("Cinema", R.drawable.cinema));
        adapter.add(new SampleItem("Discoveries", R.drawable.discoveries));
        adapter.add(new SampleItem("Events", R.drawable.events));
        adapter.add(new SampleItem("Literature", R.drawable.literature));
        adapter.add(new SampleItem("Music", R.drawable.music));
        adapter.add(new SampleItem("Nature", R.drawable.nature));
        adapter.add(new SampleItem("Politics", R.drawable.politics));
        adapter.add(new SampleItem("Science", R.drawable.science));
        adapter.add(new SampleItem("Sports", R.drawable.sports));
        adapter.add(new SampleItem("Technology", R.drawable.technology));

    }
    setListAdapter(adapter);
}

private class SampleItem {
    public String tag;
    public int iconRes;

    public SampleItem(String tag, int iconRes) {
        this.tag = tag;
        this.iconRes = iconRes;
    }
}

public class SampleAdapter extends ArrayAdapter<SampleItem> {

    public SampleAdapter(Context context) {
        super(context, 0);
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(
                    R.layout.row, null);
        }
        ImageView icon = (ImageView) convertView
                .findViewById(R.id.row_icon);
        icon.setImageResource(getItem(position).iconRes);
        TextView title = (TextView) convertView
                .findViewById(R.id.row_title);
        title.setText(getItem(position).tag);

        return convertView;
    }

}

person Jack    schedule 20.04.2014    source источник
comment
проверьте эту ссылку recursiverobot.com/post/59404388046 /   -  person Krish    schedule 20.04.2014


Ответы (1)


Что ж, если вы хотите использовать свой собственный адаптер, вы должны установить его на свой ListView вместо обычного ArrayAdapter. Итак, вместо этого:

mDrawerListView.setAdapter(new ArrayAdapter<String>(getActionBar().getThemedContext(), R.layout.row, R.id.NavListTextview, new String[]{getString(R.string.1), getString(R.string.2), getString(R.string.3)}));

сделай это:

mDrawerListView.setAdapter(new SampleAdapter(context));

Но ваш собственный SampleAdapter, похоже, еще не закончен. Похоже, вам придется немного расширить его.

person Xaver Kapeller    schedule 20.04.2014
comment
Я использовал этот адаптер в других проектах, и, похоже, он работает так, как есть. Какие модификации мне нужно внести, чтобы это заработало? Спасибо. - person Jack; 20.04.2014
comment
Я просто хотел бы, чтобы этот адаптер работал с моим ящиком навигации, я обновил свой вопрос, чтобы вы могли увидеть, как я реализовал его в другом проекте, возможно, вы узнаете, как я могу заставить его работать в этом проекте. - person Jack; 20.04.2014