2016-12-22 10 views
0

после прочтения большого количества решений в AlertDialog Мне наконец-то удалось отобразить сообщение. Сообщение - это счетчик для раундов в маленькой игре. Сообщение должно появиться, прежде чем игрок войдет в следующий раунд. Он должен оставаться несколько секунд, а затем исчезать сам по себе.Java Show Message Message на короткое время, и он исчезнет сам по себе

Что происходит: программа застревает в показе окна предупреждения и не переходит к строке i ++. Любая идея, как решить эту проблему, не вводя кнопку, которую должен ударить пользователь? Я убрал увольнение(), потому что в любом случае есть screenrefresh. Но в данный момент он не достигнет этого момента. Я работаю с Android Studio 2.2.2

Было бы здорово, если бы кто-нибудь мог заглянуть в него. Заранее спасибо.

Вот код:

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.Gravity; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.FrameLayout; 
import android.widget.ImageView; 
import android.widget.TextView; 
import java.util.Date; 
import java.util.Random; 

private void startRound() { 
    int i=0; 
    round = round +1; 
    AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
    alertDialog.setTitle(" "); 
    alertDialog.setMessage("Round " + round); 

    while(i<100) { 
     alertDialog.show(); 
     i++; 
    } 

//   alertDialog.dismiss(); 


     screenrefresh(); 
     handler(); 

ответ

1

Вы должны показать ваш диалог и использовать обработчик уволить:

final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
    alertDialog.dismiss(); 
    } 
}, 100); 

Если вы обновите активность, вы можете использовать Тосты.

вы можете настроить свой стиль тоста.

+0

Я выбрал Тост. Это именно то, что я искал. Я опубликовал окончательное и рабочее решение в качестве ответа ниже. Большое спасибо! – Daffiprogs

0

i ++ не увеличивается, потому что сначала необходимо закрыть диалоговое окно с предупреждением. поэтому он застрял.

Ниже код показывает диалог и закрывается через 5 секунд и не может быть отклонен пользователем.

final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
     alertDialog.setTitle(" "); 
     alertDialog.setMessage("Round " + round); 
     alertDialog.setCancelable(false); // if you want it not to be dismissed by user 

     alertDialog.show(); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        Thread.sleep(500); // seconds * 100 
       } catch (InterruptedException e) { 
        if (alertDialog.isShowing()) 
        { 
         alertDialog.dismiss(); 
        } 
        e.printStackTrace(); 

       }finally { 
        if (alertDialog.isShowing()) 
        { 
         alertDialog.dismiss(); 
        } 
       } 
      } 
     }).run(); 
0

Для вас задача snackbars будет более приемлемой.

Добавить CoordinatorLayout в layout.xml

<android.support.design.widget.CoordinatorLayout 
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:layout_alignParentBottom="true"  
    android:layout_centerHorizontal="true"  
    android:id="@+id/snackbarPosition"/> 

И просто запустить закусочный:

final View.OnClickListener clickListener = new View.OnClickListener() { 
    public void onClick(View v) { 
     ... 
    } 
}; 

final View coordinatorLayoutView = findViewById(R.id.snackbarPosition); 
Snackbar 
    .make(coordinatorLayoutView, R.string.snackbar_text, Snackbar.LENGTH_LONG) 
    .setAction(R.string.snackbar_action_undo, clickListener) 
    .show(); 
0

Там есть еще один вариант, и можно доверять на

Попробуйте реализации AlarmManger как показала Dialog к пользователю

Для AlarmManger Implementation

Пожалуйста, используйте

PendingIntent.getBroadcast(mContext, 
       12345, intent, PendingIntent.FLAG_ONE_SHOT); 

, и вы можете также cancel alarm manager

0

Я выбрал подсказку от Ghorbanzadeh использовать Toast. Теперь это выглядит так:

private void startRound() { 
    round = round +1; 
    if(round != 1) { 
     CharSequence text = ("Starte Runde " + round); 
     int duration = Toast.LENGTH_SHORT; 
     Toast toast = Toast.makeText(this, text, duration); 
     toast.setGravity(Gravity.CENTER_HORIZONTAL |Gravity.CENTER_VERTICAL, 0, 0); 
     toast.show(); 
    } 
} 

Посыльный расположен в центре экрана и длится достаточно долго, чтобы его можно было увидеть. Это был короткий и легкий код, который я искал. Еще раз спасибо за быструю помощь.