2015-07-03 84 views
3

我试图在我的SlidingTabLayout上显示图标,所以在我的适配器中我创建了这样的东西,我发现它有时,当我在找教程,我编辑在这里您将使用getDrawable,因为它说,它已经过时和应用,我发现android.content.res.Resources android.content.Context.getResources()'null对象引用

@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为空,您可以发布整个代码吗? –

+0

我把上面的代码 –

回答

3

在这里看到代码:

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

从这里mContext是去null。因为您没有在onCreate方法中分配任何参考mContext变量。

将其更改为:

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

我试过的代码,但它仍然没有显示图标:(但我现在没有任何错误 –

相关问题