Je suis débutant et travaille sur une application Android. Je veux arrêter chaque processus et tout d'une activité lorsque je la quitte.
Par exemple: Je suis actuellement dans " first_activity.class "
class SendPostReqAsyncTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { List<NameValuePair> nameValuePairs = new ArrayList<>(); nameValuePairs.add(new BasicNameValuePair("tel_recover_accounte", tel_recover_accounte)); try { HttpClient httpClient = new DefaultHttpClient(); HttpParams param = httpClient.getParams(); HttpConnectionParams.setConnectionTimeout(param, 15000); HttpPost httpPost = new HttpPost(ServerURL); httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse httpResponse = httpClient.execute(httpPost); httpResponse.getEntity(); str = EntityUtils.toString(httpResponse.getEntity()); } catch (IOException ignored) { } return str; } @Override protected void onPostExecute(String result) { .... } }
Si je quitte first_activity.class avant 10 secondes et allez à second_activity.class , je ne veux pas voir le message toast dans mon activité (second_activity.class) réelle.
Comment puis-je faire cela?
Modifier: J'ai fait ce message toast pour simplifier ma question.
Pour être plus clair:
Ce first_activity.class contient une requête AsyncTask. C'est cette demande AsyncTask que je veux arrêter quand je change d'activité.
Voici une partie de cette demande:
new Handler().postDelayed(new Runnable() { @Override public void run() { Toast.makeText(Con_send_code_sms_accounte_recover.this, "in first activity", Toast.LENGTH_SHORT).show(); } }, 10000);
Je veux aussi tout arrêter qui est en cours de traitement dans cette première_activité lorsque je la quitte.
Merci.
3 Réponses :
Toast
est spécial car il restera affiché même après que l'activité est masquée. C'est parce qu'il utilise un service. Cela n'arrivera pas avec Snackbar
par exemple.
Mais vous pouvez conserver l'instance de Toast que vous créez avec makeText
afin de pouvoir la masquer lorsque l'activité est fermée.
public class MainActivity extends AppCompatActivity { private Toast toast; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Create a toast to be used later. toast = Toast.makeText(requireActivity(), "Hello world!", Toast.LENGTH_LONG); Button btn = view.findViewById(R.id.btn); btn.setOnClickListener(v -> { toast.show(); }); } @Override public void onPause() { // Activity goes to background, hide toast. super.onPause(); toast.cancel(); } }
p>
annulez votre toast par cette fonction avant de quitter l'activité:
public static void cancelToast() { if (null != toast) { toast.cancel(); } }
J'espère que cela aide:
public class MainActivity extends AppCompatActivity { Handler handler; Runnable runnable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.page); handler = new Handler(); runnable = new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "in first activity", Toast.LENGTH_SHORT).show(); } }; handler.postDelayed(runnable,10000); } @Override public void onPause() { super.onPause(); handler.removeCallbacks(runnable); } }