1

I have generated a Sliding Drawer which has an ImageView and a TextView. I have generated my first image from the sdcard. I want to display the remaining from the Drawable folder. I have done the following coding but I am getting the error logs. please tell me step by step what I am doing wrong.

Profile.class

    List<DrawerItem> dataList;
    dataList.add(new DrawerItem(c.get("username"),bmp));

    //dataList.add(new DrawerItem(c.get("username"),R.drawable.ic_action_good));
    dataList.add(new DrawerItem("contacts", R.drawable.ic_action_good));
    dataList.add(new DrawerItem("Tasks Sent by Me", R.drawable.ic_action_gamepad));
    dataList.add(new DrawerItem("My Tasks", R.drawable.ic_action_labels));
    dataList.add(new DrawerItem("Profile", R.drawable.ic_action_search));
    dataList.add(new DrawerItem("Settings", R.drawable.ic_action_cloud));

CustomDrawerAdapter.class

      @Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    DrawerItemHolder drawerHolder;
    View view = convertView;

    if (view == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        drawerHolder = new DrawerItemHolder();

        view = inflater.inflate(layoutResID, parent, false);
        drawerHolder.ItemName = (TextView) view
                .findViewById(R.id.drawer_itemName);
        drawerHolder.icon = (ImageView) view.findViewById(R.id.drawer_icon);
      drawerHolder.vieworange=(View)view.findViewById(R.id.vieworangelist);
      //drawerHolder.vieworange.setVisibility(view.VISIBLE);

        view.setTag(drawerHolder);

    } else {
        drawerHolder = (DrawerItemHolder) view.getTag();

    }

    DrawerItem dItem = (DrawerItem) this.drawerItemList.get(position);
    //Log.e("drawer position",""+dItem);

    drawerHolder.icon.setImageDrawable(view.getResources().getDrawable(
            dItem.getImgResID()));
    //drawerHolder.ItemName.
    drawerHolder.ItemName.setText(dItem.getItemName());
    drawerHolder.icon.setImageBitmap(dItem.bmp);


    return view;
}

error logs

 04-29 10:38:43.546: E/Trace(4628): error opening trace file: No such file or directory (2)
 04-29 10:38:47.985: E/AndroidRuntime(4628): FATAL EXCEPTION: main
 04-29 10:38:47.985: E/AndroidRuntime(4628): android.content.res.Resources$NotFoundException: Resource ID #0x0
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.content.res.Resources.getValue(Resources.java:1014)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.content.res.Resources.getDrawable(Resources.java:659)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at com.example.taskmanager.CustomDrawerAdapter.getView(CustomDrawerAdapter.java:62)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.widget.AbsListView.obtainView(AbsListView.java:2159)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.widget.ListView.makeAndAddView(ListView.java:1831)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.widget.ListView.fillDown(ListView.java:674)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.widget.ListView.fillFromTop(ListView.java:735)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.widget.ListView.layoutChildren(ListView.java:1638)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.widget.AbsListView.onLayout(AbsListView.java:1994)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.View.layout(View.java:14008)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.ViewGroup.layout(ViewGroup.java:4373)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:714)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.View.layout(View.java:14008)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.ViewGroup.layout(ViewGroup.java:4373)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.View.layout(View.java:14008)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.ViewGroup.layout(ViewGroup.java:4373)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at  android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
  04-29 10:38:47.985: E/AndroidRuntime(4628):   at android.view.View.layout(View.java:14008)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.ViewGroup.layout(ViewGroup.java:4373)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.View.layout(View.java:14008)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.ViewGroup.layout(ViewGroup.java:4373)
  04-29 10:38:47.985: E/AndroidRuntime(4628):   at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892)
  04-29 10:38:47.985: E/AndroidRuntime(4628):   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711)
  04-29 10:38:47.985: E/AndroidRuntime(4628):   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.Choreographer.doFrame(Choreographer.java:532)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.os.Handler.handleCallback(Handler.java:725)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at android.os.Handler.dispatchMessage(Handler.java:92)
  04-29 10:38:47.985: E/AndroidRuntime(4628):   at android.os.Looper.loop(Looper.java:137)
   04-29 10:38:47.985: E/AndroidRuntime(4628):  at android.app.ActivityThread.main(ActivityThread.java:5041)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at java.lang.reflect.Method.invokeNative(Native Method)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at java.lang.reflect.Method.invoke(Method.java:511)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
 04-29 10:38:47.985: E/AndroidRuntime(4628):    at dalvik.system.NativeStart.main(Native Method)
 04-29 10:39:45.125: E/Trace(4681): error opening trace file: No such file or directory (2)

DrawerItem.class

   public class DrawerItem {

String ItemName;
int imgResID;
 Bitmap bmp;
 File f;

public DrawerItem(String itemName, int imgResID) {
    super();
    ItemName = itemName;
    this.imgResID = imgResID;
}

public DrawerItem(String itemName, Bitmap bmp) {
    // TODO Auto-generated constructor stub
    ItemName = itemName;
    File f = new File("/mnt/sdcard/test2.png");

    Bitmap bmps = BitmapFactory.decodeFile(f.getAbsolutePath());
    this.bmp = bmps;
}

/*public DrawerItem(String itemName2, File f) {
    // TODO Auto-generated constructor stub
    this.f=f;
}*/

public String getItemName() {
    return ItemName;
}
public void setItemName(String itemName) {
    ItemName = itemName;
}
public int getImgResID() {
    return imgResID;
}
public void setImgResID(int imgResID) {
    this.imgResID = imgResID;
}



 }
anu_r
  • 1,602
  • 7
  • 30
  • 61

3 Answers3

1

Just a thought, why not trying using setImageResource instead of trying to get the drawable yourself, use the framework methods!

drawerHolder.icon.setImageResource(dItem.getImgResID());

If still not working then this is strange, always worth cleaning the project to ensure the resources gets rebuilt

Dean Wild
  • 5,886
  • 3
  • 38
  • 45
  • It is not giving me force close but the image is not set, I have added another class, can you just check what is going wrong – anu_r Apr 29 '14 at 11:14
1

The 0 resource id was already addressed by other answers: The first item in your list doesn't have a resource id. Either check the resource id is != 0 or just use setImageResource().

Why you still don't see anything is because you assign a null image bitmap two lines below the setImageDrawable() call:

drawerHolder.icon.setImageDrawable(view.getResources().getDrawable(
        dItem.getImgResID()));
//drawerHolder.ItemName.
drawerHolder.ItemName.setText(dItem.getItemName());
drawerHolder.icon.setImageBitmap(dItem.bmp);

Remove the drawerHolder.icon.setImageBitmap(dItem.bmp);. (You probably want to keep something like that conditionally only for items that have a bitmap and no resource id.)

laalto
  • 150,114
  • 66
  • 286
  • 303
  • It worked by checking whether the resource id is not null. Thank you, your answers always work for me. – anu_r Apr 29 '14 at 11:23
0

I think your problem is in the line:

drawerHolder.icon.setImageDrawable(view.getResources().getDrawable(dItem.getImgResID()));

As it seems in your logs,

dItem.getImgResID()

is returning "0" so the Resources system can't find your Drawable Resource so your DrawerItem class is not returning the correct ID.

In other case the problem may be that you are getting the Resources from your view:

view.getResources()

Just change that view with your current context:

context.getResources() //context points to your current Context.

Other way you just can let the ImageView itself parse the drawable from your resources:

drawerHolder.icon.setImageResource(dItem.getImgResID());

Heisenberg
  • 656
  • 7
  • 10