Estoy haciendo una aplicación Android en Java. El problema de esta aplicación es que cuando estoy en el fragmento principal y pulse el botón de retroceso, lo quiero para volver al inicio de sesión (que pasa) pero los campos de nombre de usuario y la contraseña se muestran los datos de la última de usuario y quiero aquellos campos que muestran vacíos como si se reinicia la aplicación.
Este es mi función loginUser interior de mi clase de login.
public void loginUser() {
String url = MeuSingleton.servidor + "/login";
loginemail = email.getText().toString().trim();
loginpass = pass.getText().toString().trim();
StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
if (response.length() == 9){
Toast.makeText(Login.this, "Login efectuado com sucesso!", Toast.LENGTH_SHORT).show();
Intent i = new Intent(Login.this, MainActivity.class);
startActivity(i);
} else {
mostrarErro(getString(R.string.tituloerro), getString(R.string.login_errado));
}
} catch (Exception e) {
mostrarErro(getString(R.string.tituloerro), getString(R.string.backenderro));
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mostrarErro(getString(R.string.tituloerro), getString(R.string.interneterro));
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("email", loginemail);
map.put("password", loginpass);
return map;
}
};
MeuSingleton.getInstance(this).addToRequestQueue(stringRequest);
stringRequest.setRetryPolicy(new DefaultRetryPolicy(350, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
}
Y esta es mi clase de actividad principal:
public class MainActivity extends AppCompatActivity implements
NavigationView.OnNavigationItemSelectedListener{
MainFragment mainFragment;
FragmentManager fragmentManager;
FragmentTransaction fragmentTransaction;
DrawerLayout drawer;
NavigationView navigationView;
ActionBarDrawerToggle toggle;
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
navigationView = findViewById(R.id.nested);
navigationView.setNavigationItemSelectedListener(this);
drawer = findViewById(R.id.drawer);
toggle = new ActionBarDrawerToggle(this,drawer,toolbar,R.string.open,R.string.close);
drawer.addDrawerListener(toggle);
toggle.setDrawerIndicatorEnabled(true);
toggle.syncState();
mainFragment = new MainFragment();
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragmentContainer,mainFragment);
fragmentTransaction.commit();// add the fragment
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
closeDrawer();
if(menuItem.getItemId() == R.id.submeteralerta){
loadFragment(new InsAlertaFragment());
}
if(menuItem.getItemId() == R.id.veralertas){
loadFragment(new SecondFragment());
}
if(menuItem.getItemId() == R.id.logout){
finish();
}
if(menuItem.getItemId() == R.id.sobremim){
loadFragment(new SobreMimFragment());
}
if(menuItem.getItemId() == R.id.ajuda){
loadFragment(new AjudaFragment());
}
return true;
}
private void loadFragment(Fragment secondFragment) {
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragmentContainer,secondFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
private void closeDrawer() {
drawer.closeDrawer(GravityCompat.START);
}
}
Y por último, mi fragmento principal, que es donde quiero volver prensa y voy al ingreso:
public class MainFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main,container,false);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
}
¡Gracias por la ayuda!
Si desea una actividad Entrar con campos de texto vacíos cuando vuelva, sólo podría borrar los campos de texto fuera antes de lanzar MainActivity
. Por ejemplo:
Toast.makeText(Login.this, "Login efectuado com sucesso!", Toast.LENGTH_SHORT).show();
email.setText("");
pass.setText("");
Intent i = new Intent(Login.this, MainActivity.class);
startActivity(i);