【问题标题】:Setting custom adapter to Navigation Drawer将自定义适配器设置为导航抽屉
【发布时间】:2014-04-21 00:43:23
【问题描述】:

我正在尝试将我的自定义适配器与我的导航抽屉一起使用,但我不知道如何添加它以便它可以使用它。

任何指导将不胜感激,谢谢。

这是我的自定义适配器:

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;
    }

}

【问题讨论】:

标签: android navigation-drawer custom-adapter


【解决方案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 似乎还没有完成。看来你得把它延长一点。

【讨论】:

  • 我在其他项目中使用过这个适配器,它似乎可以正常工作,我需要进行哪些修改才能使其工作?谢谢。
  • 我只是想让这个适配器与我的导航抽屉一起工作,我已经更新了我的问题,所以你可以看到我是如何在另一个项目中实现它的,也许你会知道我怎么能让它在这个项目中工作。
猜你喜欢
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多