2016-03-01 106 views
1

我正在研究基於測驗的應用程序。每個問題有4個選項。問題是一個文本視圖,而我使用viewpager的選項,以便用戶可以滑動將從服務器動態加載的4個選項。
我得到NullPointerException佈局inflater。
這是我得到空值的行:佈局Inflater使用ViewPager拋出NullPointerException

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

幫助和指導表示高度讚賞。

Error : 

E/AndroidRuntime:致命異常:主 顯示java.lang.NullPointerException 在quizapp.android.mohit.com.quizapp.MyAdapter.instantiateItem(Questions.java:485)

這裏是我的Mainactivity代碼:

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); 
    } 
} 
+0

http://stackoverflow.com/a/20412475/1527458 – Dhina

+0

什麼行錯誤發生在和你在哪裏聲明場「背景」? – barq

+0

@barq:這是我得到空值的行: LayoutInflater inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 查看itemView = inflater.inflate(R.layout.viewpager_item,container,false); class MyAdapter extends PagerAdapter {int {NumberOfPages = 4; 上下文上下文; ArrayList option1List; ..... –

回答

0

創建MyAdapter構造具有Context作爲它的一個參數,例如

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

在您的活動,只需在ArrayList和背景傳球像

myAdapter = new MyAdapter(myList, getApplicationContext()); 
+0

class MyAdapter extends PagerAdapter {int {NumberOfPages = 4; 上下文上下文; ArrayList option1List; ArrayList option2List; ArrayList option3List; ArrayList option4List; public MyAdapter(上下文上下文,ArrayList option1List,ArrayList option2List,ArrayList option3List,ArrayList option4List){ this.context = context; this.option1List = option1List; this.option2List = option2List;等 } –

0

初始化適配你應該儘量擡高以另一種方式的觀點,如使用靜態方法 LayoutInflater。您還應該停止使用應用程序上下文,而應該將您的活動用作上下文。

代碼: - 你是不是定義您的construtor

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

不行,我試了一下! –

0

你箱子適配器對象,並通過四項的ArrayList中,但在您的適配器.....請定義it.See下面

代碼

試試這個.....

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); 
    } 
} 
+0

已經做了..但我得到空值 –

相關問題