在android中调用onCreate方法中的onCreate方法

时间:2014-04-23 09:00:33

标签: java android gps

MainActivity.java

public class MainActivity extends FragmentActivity {

    LocationManager locationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        if ( !locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
            showDialog();

        }

    }

    public void showDialog(){
        //GPS-Dialog
        GpsEnablingDialog gpsAlert;
        try {
            gpsAlert = new GpsEnablingDialog();
            gpsAlert.show(getSupportFragmentManager(), "GpsAlert_Tag");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            Log.d("My-Log-Msg",e.toString());
            e.printStackTrace();
        }       
    }
}

我尝试了 ::

import android.content.Context;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;

public class MainActivity extends FragmentActivity {

    LocationManager locationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        if ( !locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
            showDialog();
            try {
                onCreate(savedInstanceState);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                Log.d("My-Log-Msg",e.toString());
            }
        }

    }

    public void showDialog(){
        //GPS-Dialog
        GpsEnablingDialog gpsAlert;
        try {
            gpsAlert = new GpsEnablingDialog();
            gpsAlert.show(getSupportFragmentManager(), "GpsAlert_Tag");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            Log.d("My-Log-Msg",e.toString());
            e.printStackTrace();
        }

    }
}

日志 ::

04-23 14:22:19.969: D/My-Log-Msg(1586): java.lang.IllegalStateException: Already attached
04-23 14:22:20.419: D/gralloc_goldfish(1586): Emulator without GPU emulation detected.

我的理解 ::

  • 从日志中我可以清楚地了解到我想要附加 已经附加的东西
  • 为什么我这样做::第一次加载活动时,它会检查 为GPS启用与否,弹出一个对话框并带我到 设置页面
  • 现在我启用GPS,然后按回电话上的后退按钮 MainActivity
  • 我想从开始和检查重新启动活动生命周期 这些GPS并继续进行

有关如何实现此目标的任何想法

1 个答案:

答案 0 :(得分:1)

你永远不应该明确地呼叫onCreate()。 Android在创建活动时调用它。您应该查看the activity lifecycle,看看当用户从设置活动中返回时,您是否无法将某些代码移动到另一个回调方法(例如onResume())。

如果您真的希望再次调用onCreate(),则应该查看API级别11中添加的Activity.recreate()。如果您低于该API,则可以使用以下代码解决此问题:

Intent intent = getIntent();
finish();
startActivity(intent);

这完成了活动,并以与首先创建它相同的意图再次启动它。