Я пытаюсь показать тост перед циклом for, однако тост не отображается. Я также попытался добавить закусочную, но это тоже не сработало. Я хотел бы знать, почему тост не срабатывает в первую очередь. Я даже пробовал следующее, но он продолжал цикл:Показывать тост до цикла for не работает
Toast toast = Toast.makeText(getApplicationContext(), "Hello", Toast.LENGTH_SHORT);
while (!toast.getView().isShown()) {
toast.show();
}
Как я могу показать тост перед циклом for?
ArrayList<String> pizzaBases = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
main.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Hello", Toast.LENGTH_SHORT);
Snackbar.make(findViewById(android.R.id.content), "Had a snack at Snackbar", Snackbar.LENGTH_LONG).show();
}
});
SharedPreferences preferences = getPreferences(Context.MODE_PRIVATE);
for (int i = 0; i < 100; i++) {
try {
String pizza = preferences.getString("TypeOfBase" + i, "");
if (!pizza.equals("")) {
pizzaBases.add(pizza);
}
} catch (NullPointerException e) {
//Do nothing here
}
}
}
});
Button button1 = (Button) findViewById(R.id.buttonOne);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (String myString : pizzaBases) {
System.out.println(myString);
}
}
});
}
Я попытался решения, как runOnUiThread, AsyncTask и в то время как петли, но все они не показывают тостов, ни закусочную.
EDIT:
Я обнаружил, что UI только обновления ПОСЛЕ цикл выполняется. Мне интересно, почему это происходит, хотя оно активировано первым.
Я хотел бы сообщить пользователю, что функция успешно запущена, когда он нажимает кнопку.Это необходимо, поскольку пользователь должен ждать, и я хотел бы обратиться к нему, почему. В этом примере это «Привет», но в релизе это будет другое сообщение. – Jason
Если важно, чтобы пользователь сразу увидел сообщение, вы не должны полагаться на тосты. Я бы предложил интегрировать его где-нибудь в вашем пользовательском интерфейсе, например, показывая сообщение в TextView или изменяя текст кнопки, когда пользователь нажимает на нее (некоторые веб-сайты делают это, они отключают кнопку, а текст изменяется на «Отправка». .. »вместе с индикатором прогресса). Но как реализовать это скорее вопрос UX. Вы также можете использовать что-то вроде Crouton: https://play.google.com/store/apps/details?id=de.keyboardsurfer.app.demo.crouton – Dalmas
Я проверил и узнал, что пользовательский интерфейс обновляется только после loop, хотя он срабатывает перед циклом for. – Jason