Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 22/01/15, 11:02:20
Array

[xs_avatar]
Walnow Walnow no está en línea
Usuario novato en la web
 
Fecha de registro: nov 2014
Mensajes: 15
Modelo de smartphone: Galaxy S4
Tu operador: Movistar
ViewPager con Tabs

Hola a todos,

Estoy usando una activity que usar 3 fragment que están cargados en un viewpager mediante un FragmentPageAdapter.

Lo que quiero es recuperar los datos de los edittext de los 3 fragment desde la activity contenedora porque esta tiene un menú. Una opción del menú es guardar los datos en la base de datos por lo que desde la activity principal al pulsar sobre la opción de guardar quiero recuperar todo los datos que ha introducido el usuario para guardarlos en la bd.

Estoy intentando recuperar el fragment desde el adapter para después referenciar el edittext pero me da nulo
Código:
Fragment fragment1 = mAdapter.getItem(0);
EditText et1 = (EditText) fragment1.getView().findViewById(R.id.editText);

Última edición por Walnow Día 22/01/15 a las 11:10:40.
Responder Con Cita


  #2  
Viejo 22/01/15, 11:22:55
Array

[xs_avatar]
Walnow Walnow no está en línea
Usuario novato en la web
 
Fecha de registro: nov 2014
Mensajes: 15
Modelo de smartphone: Galaxy S4
Tu operador: Movistar
La solución por si a alguien mas le sirve es usar instantiateItem para obtener el fragment y de ahí su vista.

Código:
Fragment fragment1 = (Fragment) mAdapter.instantiateItem(viewPager, 0);
Fragment fragment2 = (Fragment) mAdapter.instantiateItem(viewPager, 1);

EditText et1 = (EditText) fragment1.getView().findViewById(R.id.editText);
EditText et2 = (EditText) fragment2.getView().findViewById(R.id.editText2);
Responder Con Cita
  #3  
Viejo 22/01/15, 15:18:29
Array

[xs_avatar]
Walnow Walnow no está en línea
Usuario novato en la web
 
Fecha de registro: nov 2014
Mensajes: 15
Modelo de smartphone: Galaxy S4
Tu operador: Movistar
A ver si alguien me puede ayudar porque no entiendo nada. Cuando pulso el botón nuevo si estoy en la segunda pestaña el toast me muestra bien los 3 valores de cada fragment. El problema es que si estoy en el primero o en el tercero, me entra por el try dandome un null.

Pongo el código de lo que estoy haciendo por si alguien sabe cual es el problema

Main Activity
Código:
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

    private ViewPager viewPager;
    private TabAdapter tabAdapter;
    private ActionBar actionBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        tabAdapter = new TabAdapter(getSupportFragmentManager());

        viewPager.setAdapter(tabAdapter);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        actionBar.addTab(actionBar.newTab().setText("Fragment 1").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Fragment 2").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Fragment 3").setTabListener(this));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        if (id == R.id.nuevo) {

            try {
                Fragment1 fragment_1 = (Fragment1) tabAdapter.instantiateItem(viewPager, 0);
                Fragment2 fragment_2 = (Fragment2) tabAdapter.instantiateItem(viewPager, 1);
                Fragment3 fragment_3 = (Fragment3) tabAdapter.instantiateItem(viewPager, 2);

                EditText et_texto1 = (EditText) fragment_1.getView().findViewById(R.id.et_texto1);
                EditText et_texto2 = (EditText) fragment_2.getView().findViewById(R.id.et_texto2);
                EditText et_texto3 = (EditText) fragment_3.getView().findViewById(R.id.et_texto3);

                 Toast.makeText(this, "Texto 1: " + et_texto1.getText().toString() + " :  Texto 2: " + et_texto2.getText().toString() + " : Texto 3: " +  et_texto3.getText().toString(), Toast.LENGTH_SHORT).show();

                return true;
            } catch (Exception e){
                Toast.makeText(this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
                return false;
            }
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
                viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

    }
}
TabAdapter
Código:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class TabAdapter extends FragmentPagerAdapter{

    public TabAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new Fragment1();
            case 1:
                return new Fragment2();
            case 2:
                return new Fragment3();
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return 3;
    }
}
Fragment1
Código:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment1, container, false);
        return view;
    }
}
Fragment2
Código:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment2 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment2, container, false);
        return view;
    }
}
Fragment3
Código:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment3 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment3, container, false);
        return view;
    }
}
Por ultimo los layout:

activity_main

Código:
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
fragment1
Código:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_texto1" />
</LinearLayout>
fragment2
Código:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_texto2" />
</LinearLayout>
fragment3
Código:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_texto3" />
</LinearLayout>
Responder Con Cita
  #4  
Viejo 22/01/15, 16:48:00
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
El ViewPager sólo mantiene por defecto en memoria a las páginas inmediatamente a cada lado, es decir, que si estás en la segunda tienes acceso a la primera y tercera. Pero si estás en la primera la tercera no existirá, y viceversa.

Para solucionarlo basta con establecer que quieres mantener un límite mayor, en este caso, de 2 páginas por izquierda y derecha:

http://developer.android.com/referen...nPageLimit(int)

viewPaget.setOffscreenLimit(2);
Responder Con Cita
  #5  
Viejo 22/01/15, 17:46:58
Array

[xs_avatar]
Walnow Walnow no está en línea
Usuario novato en la web
 
Fecha de registro: nov 2014
Mensajes: 15
Modelo de smartphone: Galaxy S4
Tu operador: Movistar
Gracias kriogeN, con esto me funciona correctamente. Por último, es esa la forma correcta de usar los tab?
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android

Herramientas


Hora actual: 20:24:42 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /