1

I'm working on a quiz based app. Each question has 4 options. Question is a text view while for options I'm using a viewpager so that the user can swipe the 4 options that will be loaded dynamically from the server.
I'm getting NullPointerException for Layout inflater.
This is the line I get null value:

LayoutInflater inflater = (LayoutInflater)  
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.viewpager_item, container, false);
class MyAdapter extends PagerAdapter { 
    int NumberOfPages = 4;
    Context context;
    ArrayList<String> option1List; .....

Help and guidance is highly appreciated.

Error :

E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.NullPointerException at quizapp.android.mohit.com.quizapp.MyAdapter.instantiateItem(Questions.java:485)

Here is my Mainactivity code :

  public class Questions extends ActionBarActivity {
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_questions);
  dbHelper = new DataBaseHelper(getApplicationContext());

viewPager = (ViewPager) findViewById(R.id.viewPager);
adapter = new MyAdapter(option1List, option2List, option3List,option4List);
viewPager.setAdapter(adapter);

class MyAdapter extends PagerAdapter {
    int NumberOfPages = 4;
    Context context;
    LayoutInflater inflater;
    View itemView;
    ArrayList<String> option1List;
    ArrayList<String> option2List;
    ArrayList<String> option3List;
    ArrayList<String> option4List;

    public MyAdapter(ArrayList<String> option1List, ArrayList<String> option2List, ArrayList<String> option3List, ArrayList<String> option4List) {
        this.option1List = option1List;
        this.option2List = option2List;
        this.option3List = option3List;
        this.option4List = option4List;
    }
    public int getCount(){
        return NumberOfPages;
    }

    public boolean isViewFromObject(View container, Object obj) {
        return container == obj;
        // return container == (View) obj;
    }

    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View itemView = inflater.inflate(R.layout.viewpager_item, container, false);
        // Declare Variables
        TextView option1, option2, option3, option4;
        // Locate the TextViews in viewpager_item.xml
        option1 = (TextView) itemView.findViewById(R.id.tv_option1);
        option2 = (TextView) itemView.findViewById(R.id.tv_option2);
        option3 = (TextView) itemView.findViewById(R.id.tv_option3);
        option4 = (TextView) itemView.findViewById(R.id.tv_option4);
        // Capture position and set to the TextViews
        option1.setText(option1List.get(0));
        option2.setText(option2List.get(0));
        option3.setText(option3List.get(0));
        option4.setText(option4List.get(0));
        // Add viewpager_item.xml to ViewPager
        container.addView(itemView);
        return itemView;
    }

    public void destroyItem(ViewGroup container, int position, Object obj) {
       container.removeView((LinearLayout)obj);
    }
}
  • http://stackoverflow.com/a/20412475/1527458 – Dhinakaran Thennarasu Mar 01 '16 at 07:04
  • What line is the error happening in and where are you declaring the field "context"? – barq Mar 01 '16 at 07:09
  • @barq : This is the line i get null value : LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View itemView = inflater.inflate(R.layout.viewpager_item, container, false); class MyAdapter extends PagerAdapter { int NumberOfPages = 4; Context context; ArrayList option1List; ..... –  Mar 01 '16 at 07:34
  • you need to pass getSupportFragmentManager() to your view pager adapter – Mina Fawzy Mar 01 '16 at 07:37
  • @Mina Fawzy : I'm not using fragments. I'm implementing Viewpager with PagerAdapter rather than using fragments. –  Mar 01 '16 at 07:41
  • `adapter = new MyAdapter(option1List, option2List, option3List,option4List);` where are you retrieving these values in adapter . you say 4 options can be swiped in viewpager then y 4 textviews are needed.. one textview should be inflated right – Dhinakaran Thennarasu Mar 01 '16 at 08:02
  • @Dhina : Thanks. I just forgot that I need to take a single text view & not 4 text views. –  Mar 04 '16 at 06:31
  • Hope your issue is solved. – Dhinakaran Thennarasu Mar 04 '16 at 06:56
  • @Dhina : Yes dear !! Thank you once again :) –  Mar 04 '16 at 06:57

3 Answers3

0

create a MyAdapter constructor which has Context as one of its parameters e.g

private Context context;
private ArrayList<String>arrayList;
public MyAdapter(ArrayList<String>, Context context){
this.context = context;
this.arrayList = arrayList;

in you activity, just initialize the adapter by passing in arraylist and context like

myAdapter = new MyAdapter(myList, getApplicationContext());
Tirth Patel
  • 5,443
  • 3
  • 27
  • 39
Aroniez
  • 99
  • 2
  • 11
  • class MyAdapter extends PagerAdapter { int NumberOfPages = 4; Context context; ArrayList option1List; ArrayList option2List; ArrayList option3List; ArrayList option4List; public MyAdapter(Context context,ArrayList option1List, ArrayList option2List, ArrayList option3List, ArrayList option4List) { this.context = context; this.option1List = option1List; this.option2List = option2List; and so on } –  Mar 01 '16 at 07:35
0

You should try to inflate the view in another way such as using static methods of LayoutInflater. You should also stop using application context instead you should use your activity as context.

Code :-

View v = LayoutInflater.from(context).inflate(R.layout.viewpager_item, container, false);
0

you crate Adapter object and pass four ArrayList in it but In your adapter you are not defined your construtor.....please define it.See the code below

try this.....

public class MyAdapter extends PagerAdapter {
    int NumberOfPages = 4;
    LayoutInflater inflater;

public MyAdapter(ArrayList<type you define> option1List, ArrayList<type you define>  option2List, ArrayList<type you define>  option3List,ArrayList<type you define> option4List) {

}
    public int getCount(){
        return NumberOfPages;
    }

    public boolean isViewFromObject(View container, Object obj) {
        return container == obj;
        // return container == (View) obj;
    }

    public Object instantiateItem(ViewGroup container, int position) {
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View itemView = inflater.inflate(R.layout.viewpager_item, container, false);
        // Declare Variables
        TextView option1, option2, option3, option4;
        // Locate the TextViews in viewpager_item.xml
        option1 = (TextView) itemView.findViewById(R.id.tv_option1);
        option2 = (TextView) itemView.findViewById(R.id.tv_option2);
        option3 = (TextView) itemView.findViewById(R.id.tv_option3);
        option4 = (TextView) itemView.findViewById(R.id.tv_option4);
        // Capture position and set to the TextViews
        option1.setText(option1List.get(0));
        option2.setText(option2List.get(0));
        option3.setText(option3List.get(0));
        option4.setText(option4List.get(0));
        // Add viewpager_item.xml to ViewPager
        container.addView(itemView);
        return itemView;
    }

    public void destroyItem(ViewGroup container, int position, Object obj) {
       container.removeView((LinearLayout)obj);
    }
}
Gaurav Rawal
  • 218
  • 1
  • 6