错误StackTrace:
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: FATAL EXCEPTION: main
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: Process: info.androidhive.materialdesign, PID: 13251
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign **E/AndroidRuntime: android.content.res.Resources$NotFoundException:** Resource ID #0x0
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: at android.content.res.Resources.getValue(Resources.java:1343)
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: at android.content.res.Resources.getDrawable(Resources.java:819)
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: at android.content.res.Resources.getDrawable(Resources.java:799)
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: at android.content.Context.getDrawable(Context.java:403)
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26)
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:321)
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: at android.support.v7.internal.widget.TintManager.getDrawable(TintManager.java:177)
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: at android.support.v7.internal.widget.TintManager.getDrawable(TintManager.java:170)
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:53)
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:74)
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: at com.actapps.ActinumERP.adapter.NavigationDrawerAdapter.onBindViewHolder(**NavigationDrawerAdapter.java:47**)
01-11 13:04:47.305 13251-13251/info.androidhive.materialdesign E/AndroidRuntime: at com.actapps.ActinumERP.adapter.NavigationDrawerAdapter.onBindViewHolder(**NavigationDrawerAdapter.java:20)**
string.xml
<string-array name="nav_drawer_labels">
<item>@string/nav_item_home</item>
<item>@string/nav_item_friends</item>
<item>@string/nav_item_notifications</item>
</string-array>
<array name="img_id_arr">
<item>@drawable/ic_store</item>
<item>@drawable/ic_business</item>
<item>@drawable/ic_power</item>
</array>
创建了2个arrayws,1个字符串数组,2个数组,其中包含图像ID
FragmentDrawer.java
public class FragmentDrawer extends Fragment {
private static String TAG = FragmentDrawer.class.getSimpleName();
private RecyclerView recyclerView;
private ActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawerLayout;
private NavigationDrawerAdapter adapter;
private View containerView;
private static String[] titles = null;
private static int[] images=null;
private FragmentDrawerListener drawerListener;
public FragmentDrawer() {
}
public void setDrawerListener(FragmentDrawerListener listener) {
this.drawerListener = listener;
}
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]);
navItem.setIcon(images[i]);
data.add(navItem);
}
return data;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// drawer labels
titles = getActivity().getResources().getStringArray(R.array.nav_drawer_labels);
images=getActivity().getResources().getIntArray(R.array.img_id_arr);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflating view layout
View layout = inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
recyclerView = (RecyclerView) layout.findViewById(R.id.drawerList);
adapter = new NavigationDrawerAdapter(getActivity(), getData());
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() {
@Override
public void onClick(View view, int position) {
drawerListener.onDrawerItemSelected(view, position);
mDrawerLayout.closeDrawer(containerView);
}
@Override
public void onLongClick(View view, int position) {
}
}));
return layout;
}
Here,created string,int to iterate the arrays.
NavigationDrawerAdapter.java
**public class NavigationDrawerAdapter extends RecyclerView.Adapter<NavigationDrawerAdapter.MyViewHolder>** {
List<NavDrawerItem> data = Collections.emptyList();
private LayoutInflater inflater;
private Context context;
public NavigationDrawerAdapter(Context context, List<NavDrawerItem> data) {
this.context = context;
inflater = LayoutInflater.from(context);
this.data = data;
}
public void delete(int position) {
data.remove(position);
notifyItemRemoved(position);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.nav_drawer_row, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
NavDrawerItem current = data.get(position);
holder.title.setText(current.getTitle());
**holder.image.setImageResource(current.getIcon());**
}
@Override
public int getItemCount() {
return data.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView title;
ImageView image;
public MyViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.title);
image=(ImageView)itemView.findViewById(R.id.image1);
}
}
}
在这里,这是持有物品的视图持有人..
NavDrawerItem.java
public class NavDrawerItem {
private boolean showNotify;
private String title;
private int icon;
public NavDrawerItem() {
}
public NavDrawerItem(boolean showNotify, String title,int icon) {
this.showNotify = showNotify;
this.title = title;
this.icon=icon;
}
public boolean isShowNotify() {
return showNotify;
}
public void setShowNotify(boolean showNotify) {
this.showNotify = showNotify;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getIcon() {
return icon;
}
public void setIcon(int icon) {
this.icon = icon;
}
}
代码中的粗体文字也显示错误..请帮助任何人.. 感谢您提前获得帮助......
答案 0 :(得分:0)
替换NavigationDrawerAdapter的bindview持有者
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
NavDrawerItem current = data.get(position);
holder.title.setText(String.valueOf(current.getTitle()));
}
答案 1 :(得分:0)
下面:
images=getActivity().getResources().getIntArray(R.array.img_id_arr);
img_id_arr
数组包含drawables id,因此请使用obtainTypedArray
代替getIntArray
获取TypedArray数组,然后使用getDrawable
方法获取Drawable
:
TypedArray images;
images=getActivity().getResources().obtainTypedArray(R.array.img_id_arr);
现在使用getResourceId
获取资源ID:
navItem.setIcon(images.getResourceId(i,-1));