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;
}