我试图在SlidingTabLayout上显示图标,所以在我的适配器中创建了类似这样的内容,我在寻找教程的某个时候找到了它,所以我编辑了将使用getDrawable的部分,因为它说它已经被弃用并且应用我发现的解决方案
    @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;
}
我也在我的适配器上声明了它,我已经在这里检查是否确实将它放在可绘制对象上,并且所有这些都在那里。
  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);
}
看这里:
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;
}
| 归档时间: | 
 | 
| 查看次数: | 24941 次 | 
| 最近记录: |