Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Elementos en Fragmento no funcionan después de volver a agregar el mismo fragmento

UPDATE : He encontrado el encabezado no es la única cosa afectada, pero los listeners y otros elementos en el fragmento no se están inicializando. (Como los FAB). Las únicas cosas que funcionan correctamente es cualquier cosa construida dentro del adapter (es decir, las filas ListView )

El problema : Abrir el cajón Nav, haga clic en un elemento de la lista que abre un nuevo Fragment en la misma Activity . Abra de nuevo el Nav Drawer, haga clic en el mismo elemento que simplemente debe reemplazar el Fragment existente y mientras el Fragment se abre, todos los elementos que se establecen mediante programación en Java (texto, colores, oyentes) no se cambian / añaden al Fragment . La vista es simplemente el diseño xml predeterminado. He confirmado con Log.d que el código que establece estas cosas se está ejecutando. (Si abre un Fragment diferente y luego regresa al original, todo funciona bien)

La causa confirmada: Al cambiar esto:

  • Cómo crear Live Wallpaper en Android?
  • Determinar si se ejecuta en un dispositivo enraizado
  • Cómo cambiar ProgressDialog Spinner color en Android?
  • Cambiar el menú de opciones durante el tiempo de ejecución - invalidateOptionsMenu ()
  • Qué son los tipos de datos en SQLite que soportan android
  • Cómo habilitar el registro para apache commons HttpClient en Android
  •   compile "com.android.support:appcompat-v7:25.0.1" compile 'com.android.support:design:25.0.1' 

    a

      compile "com.android.support:appcompat-v7:25.1.0" compile 'com.android.support:design:25.1.0' 

    (Si sólo se cambia una de estas bibliotecas, no importa cuál, el problema sigue ocurriendo)

    He confirmado el cambio de estas dos bibliotecas es el problema (también confirmó este problema en una segunda aplicación – y cambiar sólo este código, tiene el mismo resultado)

    Mis preguntas son , ¿por qué está sucediendo esto y cómo se puede arreglar?

    El Código y una descripción más detallada de la pregunta original:

      FragmentTransaction tItems = fm.beginTransaction(); ListFragment mFrag = new PlannerFragment(); tItems.replace(R.id.main_frag, mFrag, TAG_CALC_FRAGMENT); tItems.commit(); 

    Hay cerca de 4 opciones en mi cajón que abren todo este Fragmento, pero antes de cada una, establezco una variable global como esta:

     MyApp.PlanType = "highbal"; MyApp.PlanType = "lowbal"; etc. 

    Basado en el valor de PlanType (arriba), ese Fragment se carga con datos diferentes (pero, en el mismo xml layouts). Es simplemente un ListView con un encabezado.

    Este Fragment , ( PlannerFragment ) carga bien la primera vez.

    Cuando hago clic en otro elemento (un PlanType diferente) que va al mismo Fragment (el mismo código anterior ejecutado): El ListView carga multa en la lista real. Pero en el header de la lista, ninguno de los valores setText() establece los nuevos datos correctamente. Utiliza los valores predeterminados de mi diseño xml .

    Ahora, si carga un Fragment diferente en medio, todo funciona muy bien. Es sólo cuando yo o bien añadir o reemplazar (he intentado ambos) el mismo Fragment en la parte superior de la antigua hace que esto suceda.

    Aquí está el código de encabezado en la parte superior de PlannerFragment

     @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Setup listview lv = getListView(); LayoutInflater inflaterHeader = getActivity().getLayoutInflater(); ViewGroup header = (ViewGroup) inflaterHeader.inflate(R.layout.planner_listview_header, lv, false); lv.addHeaderView(header, null, false); // Load Data then Set Textviews, eg: TextView title = (TextView) getActivity().findViewById(R.id.tvPlannerTitle); dateOutput = (TextView) getActivity().findViewById(R.id.tvDebtOutDate); 

    Si agrego a ese código, dateOutput.setText("test"); eso no pasa. Puedo hacer un Log.d y mis registros de datos, por lo que este código se está leyendo, pero la interfaz de usuario no está establecido.

    Incluso he intentado quitar el Fragment primero como esto con un cheque:

      Fragment fragment = fm.findFragmentByTag(TAG_CALC_FRAGMENT); if(fragment != null) fm.beginTransaction().remove(fragment).commit(); 

    Esto no tiene efecto.

    Una vez más, esto ocurrió SOLAMENTE cuando cambié las bibliotecas arriba. ¿Es esto un error con la biblioteca o ahora responde de manera diferente?

  • Color de fondo del título de Android ActionMode
  • No vea Android SDK y AVD Manager cuando ejecuta el comando de la herramienta android
  • ¿Cuáles son las buenas maneras (existentes) de transmitir datos a múltiples teléfonos móviles sin Internet?
  • WRAP_CONTENT no funciona después de agregar vistas dinámicamente
  • No se pudo encontrar com.google.android.gms: play-services: 3.1.59 3.2.25 4.0.30 4.1.32 4.2.40 4.2.42 4.3.23 4.4.52 5.0.77 5.0.89 5.2.08 6.1. 11 6.1.71 6.5.87
  • Cómo dibujar la clase Button en libgdx
  • 2 Solutions collect form web for “Elementos en Fragmento no funcionan después de volver a agregar el mismo fragmento”

    Hay muchos cambios y problemas con Fragments en appcompat 25.1.0 . El primero parece relacionado con su problema, pero los dos siguientes deben ser leídos, ya que puede ser importante.


    FragmentTransaction reemplaza el comportamiento

    Reemplazar no funciona correctamente en appCompat 25.1.0
    Estado actual (Jan 4 2017): error asignado
    Enlace de problema


    Cambio del ciclo de vida del fragmento en 25.1.0

    OnStart en el nuevo Fragment se llama antes onStop en el anterior
    Estado actual : funciona como se esperaba. Para mí podría ser un cambio de ruptura desde app app 25.0.x.

    También hay un problema con el evento de reanudar llamado dos veces en fragmento, vea aquí .

    TLDR. Tal vez la mejor solución temporal es no usar 25.1.0 hasta que se acabe una nueva versión.

    Puede agregar list_view_header.xml en el método navigationDrawer() y cambiar la posición del elemento seleccionado como selectItem(position - 1) .

      private void navigationDrawer() { mTitle = mDrawerTitle = getTitle(); // mNavigationDrawerItemTitles = getResources().getStringArray(R.array.navigation_drawer_items_array); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.left_drawer); LayoutInflater inflater = getLayoutInflater(); View listHeaderView = inflater.inflate(R.layout.list_view_header, null, false); mDrawerList.addHeaderView(listHeaderView, null, false); setupToolbar(); DataModel[] drawerItem = new DataModel[6]; drawerItem[0] = new DataModel(R.drawable.dashboard_icon, "Dashboard"); drawerItem[1] = new DataModel(R.drawable.cal_icon, "Calender"); drawerItem[2] = new DataModel(R.drawable.classes, "Classes"); drawerItem[3] = new DataModel(R.drawable.message_icon_hdpi, "Message Center"); drawerItem[4] = new DataModel(R.drawable.profile, "Profile & Setting"); drawerItem[5] = new DataModel(R.drawable.bulletin_icon, "Bulletin Board"); getSupportActionBar().setDisplayHomeAsUpEnabled(false); getSupportActionBar().setHomeButtonEnabled(true); DrawerItemCustomAdapter adapter = new DrawerItemCustomAdapter(this, R.layout.list_view_item_row, drawerItem); mDrawerList.setAdapter(adapter); mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerLayout.setDrawerListener(mDrawerToggle); setupDrawerToggle(); } private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { selectItem(position - 1); } } private void selectItem(int i) { Fragment fragment = null; switch (i) { case 0: fragment = new Fragment_DashBoard(); // toolbar.setTitle("Dashboard"); Titletv.setText("Dashboard"); break; case 1: fragment = new Fragment_Calender(); // toolbar.setTitle("Calender"); Titletv.setText("Calender"); break; case 2: fragment = new Fragment_Classes(); // toolbar.setTitle("Classes"); Titletv.setText("Classes"); break; case 3: fragment = new Fragment_MessageCenter(); // toolbar.setTitle("Message"); Titletv.setText("Messages"); break; case 4: fragment = new Fragment_ProfileSetting(); // toolbar.setTitle("Profile"); Titletv.setText("Profile"); break; case 5: fragment = new Fragment_BulletinBoard(); //toolbar.setTitle("Bulletin Board"); Titletv.setText("Bulletin Board"); break; default: break; } if (fragment != null) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction trans = fragmentManager.beginTransaction(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).addToBackStack(null).commit(); mDrawerList.setItemChecked(i, true); mDrawerList.getItemAtPosition(i); // setTitle(mNavigationDrawerItemTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } else { Log.e("MainActivity", "Error in creating fragment"); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.