Enviar datos (ArrayList) de Actividad a Fragmento
Tengo sólo una Activity
con un solo Fragment
asociado. El Fragment
forma parte del Navigation Drawer
. Ahora tengo un ArrayList<String>
que sigue cambiando. Lo quiero de tal manera que, cada vez que abro el Navigation Drawer
, el ArrayList
debe ser pasado al Fragment
.
El Fragment
tiene un ListView
que se rellena con el ArrayList
.
- Error al ejecutar sbt install-emulator
- Java Android leer el archivo completo rápidamente
- ¿Por qué no puede OSX detectar Android S Galaxy para la depuración USB?
- ¿Cuál es el propósito de las anotaciones de @SmallTest, @MediumTest y @LargeTest en Android?
- Manera de almacenar un diccionario grande con poca huella de memoria + búsquedas rápidas (en Android)
Esta es la Activity
con el código de la Toolbar
de Toolbar
y el DrawerLayout
:
toolbar = (Toolbar) findViewById(R.id.app_bar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayShowHomeEnabled(true); OnlineNavDrawerFragment drawerFragment = (OnlineNavDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentUsers); drawerFragment.setUp((DrawerLayout) findViewById(R.id.drawer_layout), toolbar);
Este es el código correspondiente del Fragment
:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_online_nav_drawer, container, false); ListView lvOnline = (ListView) view.findViewById(R.id.lvOnlineUsers); return view; } public void setUp(DrawerLayout drawerLayout, Toolbar toolbar) { mDrawerLayout = drawerLayout; mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); getActivity().invalidateOptionsMenu(); } @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); getActivity().invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); mDrawerLayout.post(new Runnable() { @Override public void run() { mDrawerToggle.syncState(); } }); }
Estoy haciendo frente al problema siguiente: cómo pasar ArrayList<String>
de la Activity
al Fragment
.
Además, no puedo ver en qué punto del código de Activity
realmente puedo pasar los datos.
PS: La mayor parte del código es la versión modificada de uno mostrado en una serie de videos de YouTube. Y funciona en su forma actual.
- Obtener id generado después de insertar
- Evitar que la actividad se recargue al acceder al menú de acción contextual haciendo clic en una imagen en la vista de cuadrícula asíncrona
- ¿Cómo utilizar el algoritmo de relleno de inundación en Android?
- Utilización de la base de datos legible y escrita de SQLite
- Rendimiento JPG vs WebP en Android
- ¿Cómo obtener detalles de la aplicación de terceros en android?
- cómo poner el botón al lado de actividad titile en android?
- ¿Cómo puedo mover objetos por velocidad correctamente?
En tu fragmento haz esto.
GetDataInterface sGetDataInterface; public interface GetDataInterface { ArrayList<String> getDataList(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); try { sGetDataInterface= (GetDataInterface) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + "must implement GetDataInterface Interface"); } @Override public void onResume() { super.onResume(); if(sGetDataInterface != null){ mData = sGetDataInterface.getDataList(); } } }
En su actividad principal
public class MainActivity implements YourFragmentName.GetDataInterface { @Override public ArrayList<String> getDataList() { return mDataArrayList; } }
Utilice un EventBus (como https://github.com/greenrobot/EventBus ). Defina su propio evento como NavigationDataChangedEvent
y registre su Fragmento para NavigationDataChangedEvent
en Fragment.onViewCreated()
y anule el registro (importante para evitar fugas de memoria) en Fragment.onDestroyView()
. La actividad simplemente puede publicar un objeto NavigationDataChangedEvent
siempre que los datos hayan cambiado para informar al fragmento. Mediante el uso de un EventBus su actividad y fragmento se desacoplan …