2015-03-07 2 views
0

моего приложения в настоящее время имеет странное поведениезначков навигации ящика отсутствуют

Когда я бег в первый раз нормально, но после нескольких щелчков мыши, значки навигации ящика пропадают.

enter image description here

enter image description here

Мой код

@Override 
     protected void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      mTitle = mDrawerTitle = getTitle(); 
      menu_array = getResources().getStringArray(R.array.menu_array); 


      GCMRegistrar.checkDevice(MainActivity.this); 
      GCMRegistrar.checkManifest(MainActivity.this); 

      final String regId = GCMRegistrar.getRegistrationId(MainActivity.this); 
      if (regId.equals("")) 
      { 
       GCMRegistrar.register(MainActivity.this, SENDER_ID); 
      } 
      else 
      { 
       Log.v("GCMTest", "Ya registrado"); 
      } 

      setDrawer(); 

      getActionBar().setDisplayHomeAsUpEnabled(true); 
      getActionBar().setHomeButtonEnabled(true); 

      mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_navigation_drawer, R.string.drawer_open, R.string.drawer_close) 
      { 
       public void onDrawerClosed(View view) 
       { 
        getActionBar().setTitle(mTitle); 
        invalidateOptionsMenu(); 
       } 

       public void onDrawerOpened(View drawerView) 
       { 
        getActionBar().setTitle(mDrawerTitle); 
        invalidateOptionsMenu(); 
       } 
      }; 

      mDrawerLayout.setDrawerListener(mDrawerToggle); 

      if (savedInstanceState == null) 
      { 
       selectItem(0); 
      } 
     } 


private void setDrawer() 
    { 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.left_drawer); 

     mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 

     mDrawerList.setAdapter(new CustomDrawerAdapter(this, R.layout.drawer_list_item, menu_array)); 
     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 
    } 

public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem> 
{ 

    Context context; 
    String[] drawerItemList; 
    int layoutResID; 
    private TypedArray imgs; 

    public CustomDrawerAdapter(Context context, int layoutResourceID, String[] listItems) 
    { 
     super(context, layoutResourceID); 
     this.context = context; 
     this.drawerItemList = listItems; 
     this.layoutResID = layoutResourceID; 
     imgs = context.getResources().obtainTypedArray(R.array.random_imgs); 
    } 

    @Override 
    public int getCount() 
    { 
     return drawerItemList.length; 
    } 

    @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.text1); 
      drawerHolder.icon = (ImageView) view.findViewById(R.id.imageView1); 

      view.setTag(drawerHolder); 

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

     } 


     drawerHolder.icon.setImageResource(imgs.getResourceId(position, -1)); 
     drawerHolder.ItemName.setText(drawerItemList[position]); 
     imgs.recycle(); 
     return view; 
    } 

    private static class DrawerItemHolder 
    { 
     TextView ItemName; 
     ImageView icon; 
    } 
} 


<string-array name="menu_array"> 
     <item>Puntos de carga</item> 
     <item>Mi SUBE</item> 
     <item>Configuración</item> 
     <item>Acerca de</item> 
    </string-array> 
    <string-array name="random_imgs"> 
     <item>@drawable/menu_puntos</item> 
     <item>@drawable/ic_card</item> 
     <item>@drawable/user</item> 
     <item>@drawable/menu_acerca</item> 
    </string-array> 

Спасибо за помощь !!!!

ответ

1

проблема является то, как вы настраиваете/сохранение/перерабатывают изображения:

С помощью этой линии imgs = context.getResources().obtainTypedArray(R.array.random_imgs); загружаемых изображений так, чтобы в TypedArray, так что можно для них появиться. Но как только imgs.recycle(); запустит все, они будут переработаны и перестанут появляться.

Таким образом, было бы предложено инициализировать их в другой массив int и безопасно утилизировать TypedArray.

Изменение линии:

  1. private TypedArray imgs; к private int imgs [];

  2. imgs = context.getResources().obtainTypedArray(R.array.random_imgs); в
    imgs = initializeImages();

  3. drawerHolder.icon.setImageResource(imgs.getResourceId(position, -1)); в drawerHolder.icon.setImageResource(imgs[position]);

  4. полностью удалить imgs.recycle();

  5. Добавить этот метод:

    private int[] initializeImages() { 
        TypedArray ar = context.getResources().obtainTypedArray(R.array.random_imgs); 
        int len = ar.length(); 
        int[] resIds = new int[len]; 
        for (int i = 0; i < len; i++) { 
         resIds[i] = ar.getResourceId(i, 0); 
        } 
        ar.recycle(); 
        return resIds; 
    } 
    
  6. XML-string-array должно оставаться как есть.


Другим вариантом было бы установить в Java вводимого коэффициента кода, а не XML-массив.

например.

private int imgs [] = {R.drawable.menu_puntos, 
    R.drawable.ic_card, 
    R.drawable.user, 
    R.drawable.menu_acerca 
    }; 
+0

Теперь появляются значки, но значок приложения показывает – benoffi7

+0

Это, кажется, не быть от отправленного кода, что эти два связаны! – madlymad

+0

Теперь в навигационном ящике появляется только значок приложения. Я не знаю, почему происходит – benoffi7

Смежные вопросы