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


Android reemplaza el fragmento dentro de un fragmento

Tengo un fragmento llamado "MeinProfilFragment" . Y una MainActivity que maneja la lógica de ActionBar-Tabs.

En el "MeinProfilFragment" he puesto la lógica para un "Login-Process" .

Después de que el usuario haya iniciado sesión correctamente, quiero mostrar otro diseño.

Cómo hacer ? ¿Es posible reemplazar un Fragmento dentro de un Fragmento ? ¿O tengo que llamar a MainActivity para UI-Updates?

Aquí está el código de la "MainActivity" :

public class MainActivity extends Activity { public static int selectedTab; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayShowCustomEnabled(false); Tab meinProfil = actionBar.newTab().setText("Mein Profil"); TabListener<MeinProfilFragment> tabListenerMeinProfil = new TabListener<MeinProfilFragment>(this,"Mein Profil",MeinProfilFragment.class); meinProfil.setTabListener(tabListenerMeinProfil); actionBar.addTab(meinProfil); Tab mitglieder = actionBar.newTab().setText("Mitglieder"); TabListener<MitgliederFragment> tabListenerMitglieder = new TabListener<MitgliederFragment>(this,"Mitglieder",MitgliederFragment.class); mitglieder.setTabListener(tabListenerMitglieder); actionBar.addTab(mitglieder); Tab dinner = actionBar.newTab().setText("Dinner"); TabListener<DinnerFragment> tabListenerDinner = new TabListener<DinnerFragment>(this,"Dinner",DinnerFragment.class); dinner.setTabListener(tabListenerDinner); actionBar.addTab(dinner); Tab community = actionBar.newTab().setText("Community"); TabListener<CommunityFragment> tabListenerCommunity = new TabListener<CommunityFragment>(this,"Community",CommunityFragment.class); community.setTabListener(tabListenerCommunity); actionBar.addTab(community); if(savedInstanceState != null){ actionBar.setSelectedNavigationItem(savedInstanceState.getInt("selectedTab")); } } private static class TabListener<T extends Fragment> implements ActionBar.TabListener { private Fragment mFragment; private final Activity mActivity; private final String mTag; private final Class<T> mClass; public TabListener(Activity activity,String tag,Class<T> clz) { mActivity = activity; mTag = tag; mClass = clz; } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { selectedTab = tab.getPosition(); Fragment prevFragment; FragmentManager fm = mActivity.getFragmentManager(); prevFragment = fm.findFragmentByTag(mTag); if (prevFragment != null) { mFragment = prevFragment; } if(mFragment == null){ mFragment = Fragment.instantiate(mActivity, mClass.getName()); ft.add(android.R.id.content, mFragment,mTag); }else{ ft.attach(mFragment); } } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { selectedTab = tab.getPosition(); if(mFragment != null){ ft.detach(mFragment); }else{ mFragment = Fragment.instantiate(mActivity, mClass.getName()); ft.add(android.R.id.content, mFragment,mTag); } } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { selectedTab = tab.getPosition(); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("selectedTab", selectedTab); } 

Y aquí está el MeinProfilFragment:

 public class MeinProfilFragment extends Fragment implements OnClickListener{ EditText LoginEmail; EditText LoginPassw; Button LoginButton; public boolean loggedIn = false; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.mein_profil_fragment,container, false); LoginEmail = (EditText) view.findViewById(R.id.login_email_input); LoginPassw = (EditText) view.findViewById(R.id.login_passwort_input); LoginButton = (Button) view.findViewById(R.id.login_submit); LoginButton.setOnClickListener(this); return view; } @Override public void onClick(View arg0) { switch(arg0.getId()) { case R.id.login_submit: // Get Input Values: String login_email = LoginEmail.getText().toString(); String login_passw = LoginPassw.getText().toString(); if(login_email.length()<6 || login_passw.length()<4){ return; } Log.i("TEST","onClick: E-Mail: "+login_email+" \n Passwort: "+login_passw); new Login().execute(login_email,login_passw); break; } } private class Login extends AsyncTask<String,Void,JSONObject> { @Override protected JSONObject doInBackground(String... params) { HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost("xxxx"); try{ List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("mitglied_email",params[0])); nameValuePairs.add(new BasicNameValuePair("mitglied_passwort",params[1])); httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); String line = reader.readLine(); JSONObject jsonData = new JSONObject(line); return jsonData; }catch(Exception e){ e.printStackTrace(); } return null; } @Override protected void onPostExecute(JSONObject result) { super.onPostExecute(result); updateUi(result); } } public void updateUi(JSONObject result) { try { Log.i("TEST",result.getString("logged_in")); String loggedInFlag = result.getString("logged_in"); if(loggedInFlag.equals("true")){ // Richtige Angaben: Log.i("TEST","loggedInFlag EQ TRUE"); loggedIn = true; // Here i want to replace this current fragment with another called eg "ProfileFragment" }else{ // Falsche Angaben: Log.i("TEST","loggedInFlag EQ FALSE"); loggedIn = false; } } catch (JSONException e) { e.printStackTrace(); } } 

En el método updateUi () quiero mostrar / inflar otra interfaz de usuario.

Cómo hacer ? ¿Hay una manera de "reiniciar" el Fragmento y luego inflar otro Fragmento-Layout en el onCreateView ().

¿O es posible reemplazar el Fragmento-Layout con otro Fragmento-Layout dentro del Fragmento?

¿Cuál es la mejor práctica?

  • ¿Cómo se crean Fragmentos de preferencias y preferencias en Android?
  • "RecyclerView: No hay adaptador conectado; Omitir el diseño "para recyclerview en el fragmento
  • Determinar el fragmento visible en ViewPager
  • La animación de FragmentTransaction se desliza en la parte superior
  • Obtención del error "La actividad Java.lang.IllegalStateException se ha destruido" al utilizar pestañas con ViewPager
  • Animación de fragmentos: diferencia entre setCustomAnimations y setTransitionStyle
  • Fragmentos y receptores de emisión
  • Fragmento pulsando el botón Atrás
  • One Solution collect form web for “Android reemplaza el fragmento dentro de un fragmento”

    Usted puede substituir el fragmento usando esto

     FragmentManager fragmentManager2 = getFragmentManager(); FragmentTransaction fragmentTransaction2 = fragmentManager2.beginTransaction(); DetailFragment fragment2 = new DetailFragment(); fragmentTransaction2.addToBackStack("xyz"); fragmentTransaction2.hide(MeinProfilFragment.this); fragmentTransaction2.add(android.R.id.content, fragment2); fragmentTransaction2.commit(); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.