2015-07-24 1 views
2

Я хочу показать тост-сообщение каждые 2 секунды в моем приложении, которое во фрагменте не работает, но в моем коде оно отображается только раз, когда я делюсь своим кодом ниже, пожалуйста, помогите.Сообщение тоста не отображается в х секунд фрагментами?

публичного просмотра onCreateView (LayoutInflater инфлятор, ViewGroup контейнер, Пачка savedInstanceState) { rootView = inflater.inflate (R.layout.fragment_layout_one, контейнер, ложь);

MapsInitializer.initialize(getActivity()); 

    mMapView = (MapView)rootView.findViewById(R.id.mapView); 
    mMapView.onCreate(mBundle); 


    MapsInitializer.initialize(getActivity()); 

    if (android.os.Build.VERSION.SDK_INT > 9) { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
     .permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 

    /* new DownloadJSON().execute(); 
    setUpMapIfNeeded(rootView); */ 

    handler = new Handler(); 
    handler.postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      new DownloadJSON().execute(); 
       setUpMapIfNeeded(rootView); 

      Toast.makeText(getActivity(), "Data Updated!!!! ", Toast.LENGTH_SHORT).show(); 
      Log.e("Data in Log", ""); 
     } 
    }, 1000); 

    new DownloadJSON().execute(); 
    setUpMapIfNeeded(rootView); 

    /*LocationManager locman = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE); 
    //locman.requestLocationUpdates(minTime, minDistance, criteria, intent); 
    locman.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, this);*/ 




    return rootView; 
} 
+0

Вашего потока будет работать только once..The правильный метод является один задается JohanShogun –

ответ

3

Это работает для меня, вы можете это код ...

final Handler handler = new Handler(); 
    timer = new Timer(); 
    TimerTask doAsynchronousTask = new TimerTask() { 
     @Override 
     public void run() { 
      handler.post(new Runnable() { 
       public void run() { 
        Log.e("run", "run"); 

       } 
      }); 
     } 
    }; 
    timer.schedule(doAsynchronousTask, 60000, 60000); 

этот код запускается после каждого 1мина ..

+0

Да, это хорошо работает благодаря ULHAS PATIL – user3631500

+0

Вниз проголосовали за использование устаревшего API. Google рекомендует использовать ScheduledThreadPoolExecutor для нового кода: http://developer.android.com/intl/es/reference/java/util/Timer.html – JohanShogun

+0

@ULHAS PATIL: Не могли бы вы рассказать мне, что является целью предоставления 60000 двух раз ??? – user3631500

0

Возможно, ваш код запускается только один раз, поэтому после 1 секунды. он показывает это тост-сообщение. Поэтому убедитесь, что ваш код работает снова и снова. Вы видели свой журнал снова и снова?

+0

На самом деле мне нужно вызвать метод непрерывно за каждые x секунд, поэтому сначала проверяем сообщение с тостом, можете ли вы рассказать мне, как вызвать метод за каждые x секунд. – user3631500

+0

Итак, для этого вам нужно использовать Таймер. Пожалуйста, используйте Google и проверьте таймер. Он может помочь вам в соответствии с вашим требованием. –

+0

Таймеры планируют выполнение одноразовых или повторяющихся задач для выполнения. Предпочитаете ScheduledThreadPoolExecutor для нового кода. Просто скажи, как я показал ниже. – JohanShogun

2

postDelayed только делает что-то когда-то, самое простое решение для вас просто перепечатывать задачу так:

final Handler handler = new Handler(); 
final Runnable repeatingToast = new Runnable() { 

    @Override 
    public void run() { 
     Toast.makeText(getActivity(), "My text!!!",Toast.LENGTH_SHORT).show(); 
     if(your_condition) { 
      handler.postDelayed(repeatingToast, 1000); 
     } 
    } 
}; 
handler.postDelayed(repeatingToast, 1000); 
0
Toast.LENGTH_LONG = 3500; // 3.5 seconds 
Toast.LENGTH_SHORT = 2000; // 2 seconds 

Так вы звоните следующий Тост, прежде чем первый из них является dismissing.Try более долгий срок в нить.