Android : Null Pointer Exception when setting button visibility

on Monday, November 3, 2014


I am getting to change the visibility of one of the buttons on my viewpager but I am getting a Null Pointer Exception on this line:



save_button.setVisibility(Button.INVISIBLE);


I am wondering why that is? Is it because I am not getting the visibility property inside of my InstantiateItem() for the button? Should I? If so, how do I change the button visibility based on the fact if the page is viewed by the user or not?


What I am trying to do is: Show the save button if all the views are viewed in the viewpager. If not all the views are viewed, then hide the save button.


Here is my code:



boolean isViewed = false;
boolean buttonState= false; //unpressed, if true == pressed
int buttonValue = 0;

//Methods
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.score_viewpager);

//Specify the number of pages/views
numberOfPages = new Integer[]{1, 2, 3, 4, 5};

final Button save_button = (Button) findViewById(R.id.save);

//Initialize adapter to populate view
myAdapter = new MyAdapter(ScoreCollectionPager.this, numberOfPages, save_button);

//Search view for viewpager Id and set the adapter on the first item
viewPager = (ViewPager) findViewById(R.id.viewPager);
viewPager.setAdapter(myAdapter);
viewPager.setCurrentItem(0);

//Attach the page change listener inside the activity
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

Button save_button = (Button) findViewById(R.id.save);

// This method will be invoked when the current page is scrolled
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

//This method will be invoked when a new page becomes selected
@Override
public void onPageSelected(int position) {
//get position
isViewed = true;

if (isViewed && (position == numberOfPages.length)) {

save_button.setVisibility(Button.VISIBLE);
}
else {
save_button.setVisibility(Button.INVISIBLE); // Null Pointer Exception here? why?
}

}

// Called when the scroll state changes:
// SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
@Override
public void onPageScrollStateChanged(int i) {
//get state
}
});

}

private class MyAdapter extends PagerAdapter {

//fields
Button save_button;

//Constructor
public MyAdapter(Context context, numberOfPages, Button save_button) {

this.context = context;
this.numberOfPages = new ArrayList<Integer>(Arrays.asList(numberOfPages));
this.save_button = save_button;

}

//Returns total number of pages
@Override
public int getCount() {
return numberOfPages.size();
}

/**
* Create the page for the given position.
*
* @param parent The containing View in which the page will be shown.
* @param position The page position to be instantiated.
*
* @return Returns an Object representing the new page. This does not need
* to be a View, but can be some other container of the page.
*/
@Override
public Object instantiateItem(ViewGroup parent, final int position) {


//Get the inflater
LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

//inflate the root layout
View view = inflater.inflate(R.layout.score_collection, null);

//Save Button
save_button = (Button) view.findViewById(R.id.save);

save_button.setOnClickListener(new ViewGroup.OnClickListener() {
public void onClick(View view) {

//code for saving

}});

0 comments:

Post a Comment