Reputation: 1209
I have a main activity consisting of three tabs with each its corresponding fragment. In each of the fragment, there is one textview. Also, I am using ViewPager
to help me navigate through the tabs.
When I try to access a TextView
from within a fragment, I get a NULL POINTER
error. Here is my code:
Fragment 1 (tab1):
public class FragmentA extends Fragment{
TextView tv1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View parentView = inflater.inflate(R.layout.fragment_a, container, false);
//******* Error Here **********
tv1 = (TextView) getView().findViewById(R.id.fragAtv1);
return parentView;
}
}
Main Activity:
public class SwipeTabs extends FragmentActivity implements TabListener{
ViewPager viewPager;
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
setContentView(R.layout.main_swipe);
viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setAdapter(new MySwipeAdapter(getSupportFragmentManager()));
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int tab_pos) {
actionBar.setSelectedNavigationItem(tab_pos);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
// Initialize action bar with tabs
actionBar = setupActionBar();
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction arg1) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction arg1) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction arg1) {
}
private ActionBar setupActionBar(){
ActionBar newAB = getActionBar();
newAB.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tab1 = newAB.newTab();
tab1.setText("Tab 1");
tab1.setTabListener(this);
newAB.addTab(tab1);
ActionBar.Tab tab2 = newAB.newTab();
tab2.setText("Tab 2");
tab2.setTabListener(this);
newAB.addTab(tab2);
ActionBar.Tab tab3 = newAB.newTab();
tab3.setText("Tab 3");
tab3.setTabListener(this);
newAB.addTab(tab3);
return newAB;
}
}
class MySwipeAdapter extends FragmentStatePagerAdapter{
//Construstor: retuns the
public MySwipeAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch(position){
case 0:
fragment = new FragmentA();
break;
case 1:
fragment = new FragmentB();
break;
case 2:
fragment = new FragmentC();
break;
}
return fragment;
}
@Override
public int getCount() {
return 3;
}
}
Upvotes: 0
Views: 503
Reputation: 36449
You can't access getView()
and get a non-null
value before onCreateView()
returns. That doesn't make sense logically. Instead, do this:
tv1 = (TextView) parentView.findViewById(R.id.fragAtv1);
You could also override onViewCreated()
but this is simpler.
Upvotes: 2
Reputation: 3260
Instead of using getView.findviewbyId try parentView.findViewById.
tv1 = (TextView) parentView.findViewById(R.id.fragAtv1);
Upvotes: 1