2014-01-16 3 views
0

Извините, эта проблема обрабатывалась несколько раз, но я до сих пор не могу ее решить.Android-адаптер getView

У меня есть панель навигации с фрагментом, который работает хорошо, но если я использую его только операцию я получаю ошибку

You must supply a resource ID for a TextView. 

Это мой адаптер, я не думаю, что ничего плохого. Спасибо за помощь

public class NavDrawerListAdapter extends BaseAdapter { 

    private Context context; 
    private ArrayList<NavDrawerItem> navDrawerItems; 

    public NavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> navDrawerItems){ 
     this.context = context; 
     this.navDrawerItems = navDrawerItems; 
    } 

    @Override 
    public int getCount() { 
     return navDrawerItems.size(); 
    } 

    @Override 
    public Object getItem(int position) {  
     return navDrawerItems.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      LayoutInflater mInflater = (LayoutInflater) 
        context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
      convertView = mInflater.inflate(R.layout.drawer_list_item, null); 
     } 

     ImageView imgIcon = (ImageView) convertView.findViewById(R.id.icon); 
     TextView txtTitle = (TextView) convertView.findViewById(R.id.text1); 


     imgIcon.setImageResource(navDrawerItems.get(position).getIcon());   
     txtTitle.setText(navDrawerItems.get(position).getTitle()); 


     return convertView; 
    } 
    } 

и XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="48dp" > 

<ImageView 
    android:id="@+id/icon" 
    android:layout_width="35dp" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="5dp" 
    android:contentDescription="@string/desc_list_item_icon" 
    android:src="@drawable/img_1" /> 

<TextView 
android:id="@+id/text1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignBottom="@+id/icon" 
android:layout_alignParentRight="true" 
android:layout_alignParentTop="true" 

android:layout_toRightOf="@+id/icon" 
android:gravity="center_vertical" 
android:paddingLeft="5dp" 
android:text="tt" 
android:textSize="18sp" /> 

</RelativeLayout> 

в моем классе активность

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

     // nav drawer icons from resources 
     navMenuIcons = getResources().obtainTypedArray(R.array.nav_drawer_icons); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.left_drawer); 

     navDrawerItems = new ArrayList<NavDrawerItem>(); 

     //items to array 

     navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, 0))); 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, 0))); 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, 0))); 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, 0))); 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, 0))); 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, 0))); 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[6], navMenuIcons.getResourceId(6, 0))); 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[7], navMenuIcons.getResourceId(7, 0))); 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[8], navMenuIcons.getResourceId(8, 0))); 
     navMenuIcons.recycle(); 

     mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); 
     // setting the nav drawer list adapter 
     adapter = new NavDrawerListAdapter(getApplicationContext(), navDrawerItems); 

     mDrawerList.setAdapter(adapter); 
     getActionBar().setDisplayHomeAsUpEnabled(true); 

     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
       R.drawable.ic_drawer, //nav menu toggle icon 
       R.string.app_name, // nav drawer open - description for accessibility 
       R.string.app_name // nav drawer close - description for accessibility 
     ) { 
      public void onDrawerClosed(View view) { 
       getActionBar().setTitle(mTitle); 
       // calling onPrepareOptionsMenu() to show action bar icons 
       invalidateOptionsMenu(); 
      } 
      public void onDrawerOpened(View drawerView) { 
       getActionBar().setTitle(mDrawerTitle); 
       // calling onPrepareOptionsMenu() to hide action bar icons 
       invalidateOptionsMenu(); 
      } 
     }; 


    mDrawerLayout.setDrawerListener(mDrawerToggle); 
+1

Опубликовать свой класс активности, где вы установили адаптер для listView. – Piyush

+0

укажите 'id' для' RelativeLayout' – R9J

+0

http://stackoverflow.com/questions/9410267/android-arraylist-listview-textview-you-must-supply-a-resource-id-for-a-textvi – Ruban

ответ

-1

просто создать класс держатель и использовать TextView внутри GetView(), как это.

holder.textview = (TextView) convertView.findViewById(R.id.text1); 

и ниже класс для класса держателя.

public class Holder { 
    TextView textview; 
    //CheckBox check; 
} 
+1

это улучшит производительность, но какая разница в отношении ошибки op имеет? – Raghunandan

+0

бесполезный ответ. – Ruban

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