Search code examples
androidarraysandroid-studioandroid-viewpagerandroid-pageradapter

Using String-array in Pager adapter


I'm creating Slider adapter in my Android app and I have to use strings from strings.xml. I thought that using context.getResources().getStringArray() will help me, but it doesn't work. I have the same problem with listAdapter, but I think that I'm making the same mistake in two cases. Have You got any idea?

Slider adapter.class

public class SliderAdapter extends PagerAdapter {

static Resources res = null;
Context context;
LayoutInflater layoutInflater;


public SliderAdapter(Context context)
{
    this.context = context;

}

public int [] slide_images = {
        R.drawable.ecu_start,
        R.drawable.ecu_version


};

String[] slide_headings = context.getResources().getStringArray(R.array.p06_heading);


String[] slide_descs = context.getResources().getStringArray(R.array.p06_desc);


@Override
public int getCount() {
    return slide_headings.length;
}

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
    return view == (RelativeLayout) object;

}

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    layoutInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.slide_layout, container, false);




    ImageView slideImageView = (ImageView) view.findViewById(R.id.slide_image);
    TextView slideHeading = (TextView) view.findViewById(R.id.slide_heading);
    TextView slideDescription = (TextView) view.findViewById(R.id.slide_desc);

    slideImageView.setImageResource(slide_images[position]);
    slideHeading.setText(slide_headings[position]);
    slideDescription.setText(slide_descs[position]);

    container.addView(view);

    return view;
}

@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
    container.removeView((RelativeLayout)object);
}
}

Logcat:

06-16 01:45:01.834 14492-14492/com.example.jacek.hondadiagnostic E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.jacek.hondadiagnostic, PID: 14492 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jacek.hondadiagnostic/com.example.jacek.hondadiagnostic.Tipsy.P06_vtec_conversion}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference


Solution

  • try this :

    public class SliderAdapter extends PagerAdapter {
    
    static Resources res = null;
    Context context;
    LayoutInflater layoutInflater;
    
    
    public SliderAdapter(Context context)
    {
        this.context = context;
    
        slide_headings = context.getResources().getStringArray(R.array.p06_heading);
        slide_descs = context.getResources().getStringArray(R.array.p06_desc);
    }
    
    public int [] slide_images = {
            R.drawable.ecu_start,
            R.drawable.ecu_version
    
    
    };
    
    String[] slide_headings  ;
    
    
    String[] slide_descs ;
    
    
    @Override
    public int getCount() {
      if(slide_headings==null)return 0;
        return slide_headings.length;
    }
    
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == (RelativeLayout) object;
    
    }
    
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        layoutInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.slide_layout, container, false);
    
    
    
    
        ImageView slideImageView = (ImageView) view.findViewById(R.id.slide_image);
        TextView slideHeading = (TextView) view.findViewById(R.id.slide_heading);
        TextView slideDescription = (TextView) view.findViewById(R.id.slide_desc);
    
        slideImageView.setImageResource(slide_images[position]);
        slideHeading.setText(slide_headings[position]);
        slideDescription.setText(slide_descs[position]);
    
        container.addView(view);
    
        return view;
    }
    
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView((RelativeLayout)object);
    }
      }