2015-07-03 2 views
3

Я пытаюсь отображать значки на моем SlidingTabLayout, поэтому в моем адаптере я создал что-то вроде этого, где я нашел его когда-то, когда я ищу учебник я редактировал часть, где вы будете использовать getDrawable, потому что он говорит, что его уже устаревшим и применять решение я нашелandroid.content.res.Resources android.content.Context.getResources() 'на ссылке нулевого объекта

@Override 
public CharSequence getPageTitle(int position) { 

    Drawable image = ResourcesCompat.getDrawable(mContext.getResources(), icons[position], null); 
    image.setBounds(0, 0, 48, 48); 
    SpannableString sb = new SpannableString(" "); 
    ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM); 
    sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    return sb; 
} 

я также заявить об этом на моем адаптере, где я уже проверить, если я действительно положил его на мой drawable и все это есть.

private int[] icons = { 
     R.drawable.tabone, 
     R.drawable.tabtwo, 
     R.drawable.tabthree, 
     R.drawable.tapfour, 
     R.drawable.tabfive 
}; 

я не знаю, что я сделал неправильно, но я буду всегда иметь эту ошибку

Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference 

даже если я объявить переменную для обработки изображений. Может ли кто-нибудь помочь мне, пожалуйста, моя версия мин - 14, а мой целевой SDK - 22. спасибо вам заранее.

вот мой код для моего адаптера

public class ViewPagerAdapter extends FragmentStatePagerAdapter { 

CharSequence Titles[]; 
int NumbOfTabs; 

Context mContext; 

private int[] icons = { 
     R.drawable.tabone, 
     R.drawable.tabtwo, 
     R.drawable.tabthree, 
     R.drawable.tapfour, 
     R.drawable.tabfive 
}; 


public ViewPagerAdapter(FragmentManager fm,CharSequence mTitles[], int mNumbOfTabsumb, Context context) { 
    super(fm); 

    this.Titles = mTitles; 
    this.NumbOfTabs = mNumbOfTabsumb; 
    this.mContext = context; 

} 


@Override 
public Fragment getItem(int position) { 

    if(position == 0) // if the position is 0 we are returning the First tab 
    { 
     Tabone tab_one = new Tabone(); 
     return tab_one; 
    } 
    else if(position == 1) 
    { 
     Tabtwo tab_two = new Tabtwo(); 
     return tab_two; 

    }else if(position == 2){ 
     Tabthree tab_three = new Tabthree(); 
     return tab_three; 
    }else if(position == 3){ 
     Tabfour tab_four = new Tabfour(); 
     return tab_four; 
    }else{ 
     Tabfive tab_five = new Tabfive(); 
     return tab_five; 
    } 

} 


@Override 
public CharSequence getPageTitle(int position) { 

    Drawable image = ResourcesCompat.getDrawable(mContext.getResources(), icons[position], null); 
    image.setBounds(0, 0, 48, 48); 
    SpannableString sb = new SpannableString(" "); 
    ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM); 
    sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    return sb; 
} 



// This method return the Number of tabs for the tabs Strip 

@Override 
public int getCount() { 
    return NumbOfTabs; 
} 

}

вот мой MainActivity

private ViewPager mPager; 
private ViewPagerAdapter adapter; 
private SlidingTabLayout mTabs; 
private Context mContext; 

CharSequence Titles[] = {"One", "Two", "Three", "Four", "Five"}; 

int Numboftabs = 5; 

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

    adapter = new ViewPagerAdapter(getSupportFragmentManager(), Titles, Numboftabs, mContext); 

    // Assigning ViewPager View and setting the adapter 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPager.setAdapter(adapter); 

    // Assigning the Sliding Tab Layout View 
    mTabs = (SlidingTabLayout) findViewById(R.id.tabs); 
    mTabs.setDistributeEvenly(true); 


    // Setting the ViewPager For the SlidingTabsLayout 
    mTabs.setSelectedIndicatorColors(getResources().getColor(R.color.tabsIndicator)); 
    mTabs.setViewPager(mPager); 
} 
+0

mContext я s null? – rainash

+0

Ваш mContect имеет значение NULL, вы можете опубликовать весь код? –

+0

Я поставил код выше –

ответ

3

Смотрите здесь:

adapter = new ViewPagerAdapter(getSupportFragmentManager(), Titles, Numboftabs, mContext); 

Отсюда mContext является движение null. Поскольку вы не указали какой-либо отказ mContext переменной внутри метода onCreate.

изменить его:

adapter = new ViewPagerAdapter(getSupportFragmentManager(), Titles, Numboftabs, MainActivity.this); 

или вы также можете попробовать это:

внутри onCreate метод:

mContext = MainActivity.this; 

adapter = new ViewPagerAdapter(getSupportFragmentManager(), Titles, Numboftabs, mContext); 

Используйте этот код ViewPagerAdapter:

public class ViewPagerAdapter extends FragmentStatePagerAdapter { 

CharSequence Titles[]; 
int NumbOfTabs; 

private Activity mContext; 

private int[] icons = { 
     R.drawable.tabone, 
     R.drawable.tabtwo, 
     R.drawable.tabthree, 
     R.drawable.tapfour, 
     R.drawable.tabfive 
}; 


public ViewPagerAdapter(FragmentManager fm,CharSequence mTitles[], int mNumbOfTabsumb, Activity context) { 
    super(fm); 

    this.Titles = mTitles; 
    this.NumbOfTabs = mNumbOfTabsumb; 
    this.mContext = context; 

} 


@Override 
public Fragment getItem(int position) { 

    if(position == 0) // if the position is 0 we are returning the First tab 
    { 
     Tabone tab_one = new Tabone(); 
     return tab_one; 
    } 
    else if(position == 1) 
    { 
     Tabtwo tab_two = new Tabtwo(); 
     return tab_two; 

    }else if(position == 2){ 
     Tabthree tab_three = new Tabthree(); 
     return tab_three; 
    }else if(position == 3){ 
     Tabfour tab_four = new Tabfour(); 
     return tab_map; 
    }else{ 
     Tabfive tab_five = new Tabfive(); 
     return tab_five; 
    } 

} 


    @Override 
public CharSequence getPageTitle(int position) { 
    Drawable image = mContext.getResources().getDrawable(icons[position]); 
    image.setBounds(0, 0, 48, 48); 
    SpannableString sb = new SpannableString(" "); 
    ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM); 
    sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    return sb; 
} 





// This method return the Number of tabs for the tabs Strip 

@Override 
public int getCount() { 
    return NumbOfTabs; 
} 
+0

его работа теперь, но мои значки не отображаются :( –

+0

@KairiSan попробуйте мой код 'ViewPagerAdapter ' –

+0

Я пробовал код, но все же он не показывает значки :(, но у меня сейчас нет ошибок –

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