Я использую шаблон от AndroidHive: Material Design и решил добавить значок в каждую строку ящика навигации. Я уже модифицировал модель NavDrawerItem, getter и setter для значка.Android: Навигация Иконки ящиков
// 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);
}
}
Я знаю, что этот ящик был добавлен в OnCreate метод FragmentDrawer.java
@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 (иконки [я ]); всегда дайте мне 0 значение. Я думаю, именно поэтому я не могу установить imageResource на значок моего навигационного ящика.
Любая помощь будет оценена по достоинству. Спасибо.
вы можете использовать поддержку поддержки Android для создания NavigationDrawer легко ... перейдите по этой ссылке http://android-developers.blogspot.in/2015/05/android-design-support-library.html – Harish
попробуйте getDrawable (значки [i]) – Harish
Ваша ссылка была потрясающая, Харриш. Но это должно изменить весь проект. Думаю, я сначала займусь решением этой проблемы. Где я должен использовать getDrawable, Хариш? –