Acceder a textview dentro de un fragmento en la actividad
Quería usar Fragmentos con en la barra de acción. Por desgracia parece que es realmente complicado. Mis fragmentos tienen visiones de texto y quiero ser capaz de comunicarse con ellos fuera de mi actividad. Antes de comenzar a usar Fragments, podía acceder a ellos con
private EditText editText = (EditText) findViewById(R.id.editTextName);
Así que pude recibir el valor editText cuando un usuario hizo clic en guardar. ¿Cómo debo hacer esto en el Fragment-way?
- Aplicaciones de Android, comunicación con un dispositivo conectado al puerto USB
- Android MediaPlayer seekTo no funciona
- Envío de datos TCP desde Android (como cliente) - ¿no se envían datos?
- Comunicación con el servidor cliente Android
- Conexión de dos teléfonos Android para transferir datos entre ellos a través de WIFI
Actividad:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_recipe); getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); getSupportActionBar().setDisplayOptions(0, com.actionbarsherlock.app.ActionBar.DISPLAY_SHOW_HOME | com.actionbarsherlock.app.ActionBar.DISPLAY_USE_LOGO | com.actionbarsherlock.app.ActionBar.DISPLAY_SHOW_TITLE); ActionBar.Tab newTab0 = getSupportActionBar() .newTab() .setText(R.string.fragment_general) .setTabListener( new MyTabListener<GeneralFragment>(this, "general", GeneralFragment.class)); getSupportActionBar().addTab(newTab0); } public static class MyTabListener<T extends Fragment> implements TabListener { private Fragment mFragment; private final Activity mActivity; private final String mTag; private final Class<T> mClass; /** * * Constructor used each time a new tab is created. * * @param * activity * The host Activity, used to instantiate the fragment * @param * tag * The identifier tag for the fragment * @param clz * The * fragment's Class, used to instantiate the fragment */ public MyTabListener(Activity activity, String tag, Class<T> clz) { mActivity = activity; mTag = tag; mClass = clz; } /* The following are each of the ActionBar.TabListener callbacks */ public void onTabSelected(Tab tab, FragmentTransaction ft) { // Check if the fragment is already initialized if (mFragment == null) { // If not, instantiate and add it to the activity mFragment = Fragment.instantiate(mActivity, mClass.getName()); ft.add(android.R.id.content, mFragment, mTag); } else { // If it exists, simply attach it in order to show it //ft.setCustomAnimations(android.R.animator.fade_in, R.animator.animationtest); ft.attach(mFragment); } } public void onTabUnselected(Tab tab, FragmentTransaction ft) { if (mFragment != null) { //ft.setCustomAnimations(android.R.animator.fade_in, R.animator.test); ft.detach(mFragment); } } public void onTabReselected(Tab tab, FragmentTransaction ft) { } }
- ¿Cómo debo comunicarme entre las actividades?
- Comunicación USB de Android
- Comunicación USB entre Android (modo accesorio) y Windows PC (host)
- Cliente Android y servidor Java Comunicación TCP
- Programación Bluetooth en Android
- Desarrollo de dos aplicaciones para Android y comunicación entre dos
- Opciones de comunicación peer-to-peer
- ¿Qué tipo de comunicación entre aplicaciones debería elegir?
Debería llamar a getView () en el fragmento y luego usar findViewById () en la vista devuelta.
Por supuesto, no va a devolver nada hasta después de que la vista se ha creado, por lo que puede tener que llamar a algún lugar, además de crear.
Bueno, necesitas inflar un archivo xml, o crear uno desde cero, aunque no lo recomiendo, a menos que te guste el trabajo extra 🙂 Pero con una Actividad, el setContentView()
infla tu archivo xml y posteriormente en onCreate()
puede acceder a ella de la manera que se utiliza para. Tenga en cuenta que, si intenta acceder a una vista de diseño fuera de onCreate sin la vista primaria, obtendrá el mismo problema. A menos que hagas una variable global. Dado que onCreate es donde un desarrollador normalmente siempre comienza las cosas, Android hizo fácil simplemente omitir el padre Ver desde el findViewById
.
Suponiendo que tiene un archivo xml llamado edit.xml:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //this method is found within your Fragment, which you must ovverride View view = inflater.inflate(R.layout.edit, container, false); private EditText editText = (EditText) view.findViewById(R.id.editTextName); //... }
Siéntase libre de revisar los documentos Android de Fragmentos para obtener una mejor comprensión de por qué elegí hacerlo en ese método en lugar de los Fragmentos onCreate
, etc.
- Vista previa de paisaje de la disposición de xml de androide en Eclipse
- Texto de la columna multi de Android