Autore Topic: Sostituire un fragment con una nuova instanza dello stesso  (Letto 404 volte)

Offline felasandroid

  • Utente normale
  • ***
  • Post: 345
  • Respect: +10
    • Github
    • balduzziantonio
    • balduzziantonio.unifi
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Play Store ID:
    FelasTech
  • Sistema operativo:
    Windows 10
Sostituire un fragment con una nuova instanza dello stesso
« il: 08 Aprile 2015, 12:53:02 CEST »
0
Salve

vorrei sostituire un fragment con una nuova instanza di se stesso..ovvero ho un fragment che si occupa del Nav_Drawer e a certe condizioni alcuni dati che ho nell'header del navigation drawer cambiano.

Per visualizzare questo cambiamento sto usando EventBus per passare i dati, solo che al momento attuale funziona solo se ruoto dispositivo ovvero mi si ricrea il tutto. Volevo quindi capire come togliere questo fragment e ricrearlo senza dover ruotare il dispositivo.

Nel main ho:


Codice (Java): [Seleziona]
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main_activity);
     

        mNavigationNavDrawerFragment = (Nav_DrawerFragment) getFragmentManager().findFragmentById(R.id.fragment_drawer);
        mNavigationNavDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);


        inizialized(mServices);

    }

....
....

.....

  EventBus.getDefault().postSticky(new PersonDetails(mNomeCognome, mEmail));

 // Qui dovrei ricrearmi il fragment del drawer

}

Nel Nav_DrawerFragment ho:




 
Codice (Java): [Seleziona]
   @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


        View view = inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
        mDrawerList = (RecyclerView) view.findViewById(R.id.drawerList);
        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mDrawerList.setLayoutManager(layoutManager);
        mDrawerList.setHasFixedSize(true);
        final List<NavigationItem> navigationItems = getMenu();

        Nav_adapter adapter = new Nav_adapter(navigationItems,mNomeCognome,mEmail);
        adapter.setNavigationDrawerCallbacks(this);

        mDrawerList.setAdapter(adapter);
        selectItem(mCurrentSelectedPosition,items);
        return view;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        EventBus.getDefault().registerSticky(this);



    }

    public void onEventMainThread(PersonDetails event){

        mNomeCognome = event.mNomeCognome;
        mEmail = event.mEmail;

    }

public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {

        mFragmentContainerView = getActivity().findViewById(fragmentId);
        mDrawerLayout = drawerLayout;
        mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                if (!isAdded()) return;
                getActivity().invalidateOptionsMenu();
            }

            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                if (!isAdded()) return;
                getActivity().invalidateOptionsMenu();

            }
        };

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Sostituire un fragment con una nuova instanza dello stesso
« Risposta #1 il: 08 Aprile 2015, 14:57:59 CEST »
0
Non è meglio gestire tutto il drawer al 100% nell' Activity?
Io per esempio devo cambiare un badge nel drawer con una nuova stringa, allora quando nel fragment clicco "change", esso notifica all' Activity il cambiamento.
Tale comunicazione la fai dichiarando un interfaccia come da tutorial: http://developer.android.com/training/basics/fragments/communicating.html.
Non dovendo far comunicare fragment, ma semplicemente fragment e un activity, è ancora più semplice.

Offline felasandroid

  • Utente normale
  • ***
  • Post: 345
  • Respect: +10
    • Github
    • balduzziantonio
    • balduzziantonio.unifi
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Play Store ID:
    FelasTech
  • Sistema operativo:
    Windows 10
Re:Sostituire un fragment con una nuova instanza dello stesso
« Risposta #2 il: 09 Aprile 2015, 08:25:47 CEST »
0
Non è meglio gestire tutto il drawer al 100% nell' Activity?
Io per esempio devo cambiare un badge nel drawer con una nuova stringa, allora quando nel fragment clicco "change", esso notifica all' Activity il cambiamento.
Tale comunicazione la fai dichiarando un interfaccia come da tutorial: http://developer.android.com/training/basics/fragments/communicating.html.
Non dovendo far comunicare fragment, ma semplicemente fragment e un activity, è ancora più semplice.

grazie del consiglio. ho risolto col metodo notifyItemChanged.