【问题标题】:Android: Navigation Drawer IconsAndroid:导航抽屉图标
【发布时间】:2016-02-16 04:38:28
【问题描述】:

我正在使用来自AndroidHive: Material Design 的模板,并决定在每个导航抽屉行上添加一些图标。 我已经修改了模型 NavDrawerItem,添加了图标的 getter 和 setter。

// Constructor
public NavDrawerItem(boolean showNotify, String title, int icon) {
    this.showNotify = showNotify;
    this.title = title;
    this.icon = icon;
}

public String getTitle() {
    return title;
}

public int getIcon(){
    return icon;
}

public void setTitle(String title) {
    this.title = title;
}

public void setIcon(int icon){
    this.icon = icon;
}

还修改了它的适配器(NavigationDrawerAdapter),增加了图标支持

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    NavDrawerItem current = data.get(position);
    holder.title.setText(current.getTitle());
    holder.icon.setImageResource(current.getIcon());
}

class MyViewHolder extends RecyclerView.ViewHolder {
    TextView title;
    ImageView icon;

    public MyViewHolder(View itemView) {
        super(itemView);
        title = (TextView) itemView.findViewById(R.id.title);
        icon = (ImageView) itemView.findViewById(R.id.icon_drawer);
    }
}

我知道这个抽屉是在 FragmentDrawer.java 的 onCreate 方法中添加的

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // drawer labels
    titles = getActivity().getResources().getStringArray(R.array.nav_drawer_labels);
    icons = getActivity().getResources().getIntArray(R.array.nav_drawer_icon);
}

这是我来自 string.xml 的数组

<string-array name="nav_drawer_labels">
    <item>@string/nav_item_home</item>
    <item>@string/nav_item_data_visualization</item>
    <item>@string/nav_item_pending_item</item>
    <item>@string/nav_item_my_profile</item>
    <item>@string/nav_item_about_us</item>
</string-array>

<string-array name="nav_drawer_icon">
    <item>@drawable/ic_home</item>
    <item>@drawable/ic_data_visualization</item>
    <item>@drawable/ic_pending_item</item>
    <item>@drawable/ic_profile_drawer</item>
    <item>@drawable/ic_about</item>
</string-array>

我的导航抽屉项是使用 FragmentDrawer.java 中的这段代码从资源中填充的

public static List<NavDrawerItem> getData() {
    List<NavDrawerItem> data = new ArrayList<>();

    // preparing navigation drawer items
    for (int i = 0; i < titles.length; i++) {
        NavDrawerItem navItem = new NavDrawerItem();
        navItem.setTitle(titles[i]);
        System.out.println(titles[i]);

        navItem.setIcon(icons[i]);
        System.out.println(icons[i]);

        data.add(navItem);
    }
    return data;
}

我的问题是从资源中填充图标,在上面的代码中 System.out.println(icons[i]);总是给我0值。我认为这就是为什么我不能设置我的导航抽屉图标的 imageResource。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 您可以使用android设计支持库轻松创建NavigationDrawer...点击此链接android-developers.blogspot.in/2015/05/…
  • 试试getDrawable(icons[i])
  • 你的链接太棒了,哈里什。但是,事情应该会改变整个项目。我想我会先解决这个问题。我应该在哪里使用 getDrawable,Harish?
  • holder.icon.setImageResource(getDrawable(current.getIcon()));
  • 这行不通,哈里什

标签: java android arraylist navigation-drawer android-resources


【解决方案1】:

问题出在:

icons = getActivity().getResources().getIntArray(R.array.nav_drawer_icon);

要从数组中读取资源 ID,您可以使用以下代码:

icons = new int[titles.length];
TypedArray iconsArray = getResources().obtainTypedArray(R.array.nav_drawer_icon);
for (int i = 0; i < icons.length; i++)
    icons[i] = iconsArray.getResourceId(i, -1);

iconsArray.recycle();

但可能最好的做法是使用NavigationView

【讨论】:

  • 谢谢你,卡米尔。你拯救了我的一天!
猜你喜欢
  • 1970-01-01
  • 2017-05-11
  • 2016-12-22
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多