Sorry for my low level of English, I'll be brief for someone to understand me. I have an activity that has viewpager, this has several inflate layout. On a layout I have a text view. I want to add to this textview textView.setText by a string ("something"); But when I write setText boom! my application stops. Anyone have a solution?

TextView tVNombreMen1;
//

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_local_mostrar_menu);
//      Creando textview y pasandoles variables 

    tVNombreMen1 = (TextView)  findViewById(R.id.tVNombreMenu1);
            tVNombreMen1.setText("aa");

MY CLASS:

   public class Local_tipos_de_menuActivity extends ActionBarActivity {

private String[] opcionesMenu;
private DrawerLayout drawerLayout;
private ListView drawerList;
private ActionBarDrawerToggle drawerToggle;
private CharSequence tituloSeccion;  
private CharSequence tituloApp; 


private ViewPager viewPager;

private LinearLayout page1;
private LinearLayout page2;
private LinearLayout page3;
private LinearLayout page4;
//  variables titulo y descripcion menu
String tituloMenu1 = ("Menu de degustación:");
String descripcionMenu1 = ("Menu compuesto por los platos mas vendidos del  

 local.Debes elegir una bebida 2 entrantes, 2 segundos y un postre o cafe.");
double   precioMenu1      = 10.90;
String tituloMenu2 = ("Menu selecto:");
String descripcionMenu2 = ("Menu compuesto por los platos preferidos del cheff.Debes 

  elegir una bebida 2 entrantes, 2 segundos y un postre o cafe.");
double   precioMenu2      = 16.90;
TextView tVNombreMen1;
  //

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_local_mostrar_menu);
  //      Creando textview y pasandoles variables   

    tVNombreMen1 = (TextView)  findViewById(R.id.tVNombreMenu1);
    tVNombreMen1.setText("aa");
    //      TextView tVDescripcionMenu1 = (TextView)  

       findViewById(R.id.tVDescripcionMenu1);
    //      tVDescripcionMenu1.setText(descripcionMenu1);
    //      TextView tVPrecioMenu1 = (TextView)  

      findViewById(R.id.tVPrecioMenu1);
 //     tVPrecioMenu1.setText("€");


 //     TextView tVNombreMenu2 = (TextView)  findViewById(R.id.tVNombreMenu2);
 //     tVNombreMenu2.setText(tituloMenu2);
 //     TextView tVDescripcionMenu2 = (TextView)       
 findViewById(R.id.tVDescripcionMenu2);
 //     tVDescripcionMenu2.setText(descripcionMenu2);


    //DrawerLayout(menu lateral)
    opcionesMenu = new String[] {"Mi perfil", "Opción 2", "Opción 3","4"};
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawerList = (ListView) findViewById(R.id.left_drawer);
    drawerList.setAdapter(new ArrayAdapter<String>(
            getSupportActionBar().getThemedContext(),
            android.R.layout.simple_list_item_1, opcionesMenu));

    drawerList.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            //android.support.v4.app.Fragment fragment = null;

            switch (position) {

                case 0:
                    //fragment = new Fragment1();

                    Intent a = new  

   Intent(Local_tipos_de_menuActivity.this, Local_tipos_de_menuActivity.class);
                       startActivity(a);
                     //abrir activity con una animacion personalizada
                        overridePendingTransition(R.anim.right_in,  
    R.anim.right_out);
                    break;
                case 1:
                    //fragment = new Fragment2();

                    break;
                case 2:
                    //fragment = new Fragment3();

                    break;
                case 3:

                     break;
            }

            android.support.v4.app.FragmentManager fragmentManager = 
                    getSupportFragmentManager();

            fragmentManager.beginTransaction()
            //      .replace(R.id.content_frame, fragment)
                    .commit();

            drawerList.setItemChecked(position, true);

            tituloSeccion = opcionesMenu[position];
            getSupportActionBar().setTitle(tituloSeccion);

            drawerLayout.closeDrawer(drawerList);
        }
    });

    tituloSeccion = getTitle();
    tituloApp = getTitle();

    drawerToggle = new ActionBarDrawerToggle(this, 
            drawerLayout,
            R.drawable.ic_navigation_drawer, 
            R.string.drawer_open,
            R.string.drawer_close) {

        public void onDrawerClosed(View view) {
            getSupportActionBar().setTitle(tituloSeccion);


  ActivityCompat.invalidateOptionsMenu(Local_tipos_de_menuActivity.this);
        }

        public void onDrawerOpened(View drawerView) {
            getSupportActionBar().setTitle(tituloApp);

  ActivityCompat.invalidateOptionsMenu(Local_tipos_de_menuActivity.this);
        }
    };

    drawerLayout.setDrawerListener(drawerToggle);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

    //viewpagerindicator viewpager
            viewPager = (ViewPager) findViewById(R.id.pager);
            viewPager.setAdapter(new MainPageAdapter());

            TitlePageIndicator titleIndicator = 
(TitlePageIndicator)findViewById(R.id.indicator);

            //TabPageIndicator titleIndicator = 
(TabPageIndicator)findViewById(R.id.indicator);
            titleIndicator.setViewPager(viewPager);     
            titleIndicator.setOnPageChangeListener(new 
 OnPageChangeListener() {

                @Override
                public void onPageSelected(int position)
                {

                }

                @Override
                public void onPageScrolled(int position, float 
  positionOffset, int positionOffsetPixels)
                {

                }

                @Override
                public void onPageScrollStateChanged(int state)
                {

                }
            });     




}

//ActionBar
@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (drawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch(item.getItemId())
    {
        case R.id.action_settings:
            Toast.makeText(this, "Settings", 
 Toast.LENGTH_SHORT).show();;
            break;
        case R.id.action_menu2:
            startActivity(new Intent(this, Menu2Activity.class));
            //abrir activity con una animacion personalizada
            overridePendingTransition(R.anim.left_in, R.anim.left_out);
            break;

        default:
            return super.onOptionsItemSelected(item);
    }

    return true;
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

    boolean menuAbierto = drawerLayout.isDrawerOpen(drawerList);
    menu.findItem(R.id.action_atras).setVisible(false);
    if(menuAbierto)
        menu.findItem(R.id.action_menu2).setVisible(false);
    else
        menu.findItem(R.id.action_menu2).setVisible(true);

    return super.onPrepareOptionsMenu(menu);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    drawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    drawerToggle.onConfigurationChanged(newConfig);
}
//Viewpager
class MainPageAdapter extends PagerAdapter
{

    @Override
    public CharSequence getPageTitle(int position) 
    {
        String title = null;

        switch (position)
        {
        case 0:
            title = "Menu 1";
            break;
        case 1:
            title = "Menu 2";
            break;
        case 2:
            title = "Menu 3";
            break;

        default:
            title = "Menu 4";
            break;
        }
        return title;
    }

    @Override
    public int getCount()
    {
        return 4;
    }

    @Override
    public Object instantiateItem(ViewGroup collection, int position)
    {
        View page = null;
        switch (position)
        {
        case 0:
            if (page1 == null)
            {
                page1 = (LinearLayout) 



LayoutInflater.from(Local_tipos_de_menuActivity.this).inflate(R.layout.page_one_viewpager, null);


            }
            page = page1;
            break;
        case 1:
            if (page2 == null)
            {
                page2 = (LinearLayout) LayoutInflater.from(Local_tipos_de_menuActivity.this).inflate(R.layout.page_two_viewpager, null);


            }
            page = page2;
            break;
        case 2:
            if (page3 == null)
            {
                page3 = (LinearLayout) LayoutInflater.from(Local_tipos_de_menuActivity.this).inflate(R.layout.page_three_viewpager, null);


            }
            page = page3;
            break;
        default:
            if (page4 == null)
            {
                page4 = (LinearLayout) LayoutInflater.from(Local_tipos_de_menuActivity.this).inflate(R.layout.page_four_viewpager, null);
            }
            page = page4;
            break;
        }

        ((ViewPager) collection).addView(page, 0);

        return page;
    }

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

    @Override
    public void destroyItem(View collection, int position, Object view)
    {
        ((ViewPager) collection).removeView((View) view);
    }

}

I hope someone can help me because I'm going crazy. I the value of a textview setText be changed by, but being this texview within viewpager I find it impossible. While nothing is impossible in this world, thank you.

有帮助吗?

解决方案

Instead of setting text in onCreate of the activity do it in instantiateItem of the adapter. You are getting a null pointer exception because the view you are trying to find in onCreate is not added yet. So try following and let me know if you are facing more problems.

@Override
public Object instantiateItem(ViewGroup collection, int position)
{
    View page = null;
    switch (position)
    {
    case 0:
        if (page1 == null)
        {
            page1 = (LinearLayout)     LayoutInflater.from(Local_tipos_de_menuActivity.this).inflate(R.layout.page_one_viewpager, null);

     //Try below code
     tVNombreMen1 = (TextView)  page1.findViewById(R.id.tVNombreMenu1);
     tVNombreMen1.setText("aa");

        }
        page = page1;
        break;
    case 1:
        if (page2 == null)
        {
            page2 = (LinearLayout) LayoutInflater.from(Local_tipos_de_menuActivity.this).inflate(R.layout.page_two_viewpager, null);


        }
        page = page2;
        break;
    case 2:
        if (page3 == null)
        {
            page3 = (LinearLayout)      LayoutInflater.from(Local_tipos_de_menuActivity.this).inflate(R.layout.page_three_viewpager, null);


        }
        page = page3;
        break;
    default:
        if (page4 == null)
        {
            page4 = (LinearLayout) LayoutInflater.from(Local_tipos_de_menuActivity.this).inflate(R.layout.page_four_viewpager, null);
        }
        page = page4;
        break;
    }

    ((ViewPager) collection).addView(page, 0);

    return page;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top