在片段中x秒处未显示Toast消息?

时间:2015-07-24 12:32:42

标签: android android-fragments handler android-toast

我想在我的应用程序中每隔2秒显示一个toast消息,该消息处于片段而非活动状态。

但是在我的代码中,它只显示一次我在下面分享我的代码。

请指导我。提前谢谢。

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) { 
        rootView = inflater.inflate(R.layout.fragment_layout_one, container, false); 


    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; 
} 

4 个答案:

答案 0 :(得分:4)

它对我有用,你可以这些代码......

    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);

这些代码在每1Min之后运行..

答案 1 :(得分: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);

答案 2 :(得分:0)

可能是您的代码仅在1秒后运行一次。它显示了吐司的消息。因此,请确保您的代码一次又一次地运行。你一次又一次地看到你的日志吗?

答案 3 :(得分:0)

Toast.LENGTH_LONG = 3500; // 3.5 seconds
Toast.LENGTH_SHORT  = 2000; // 2 seconds

所以你在第一个被解雇之前调用下一个Toast。在线程中尝试更长的持续时间。