Java 将活动转换为片段的第一次尝试需要错误建议

Java 将活动转换为片段的第一次尝试需要错误建议,java,android,android-fragments,android-studio,android-activity,Java,Android,Android Fragments,Android Studio,Android Activity,主要活动课 活动类别: public class MapsActivity extends FragmentActivity implements LocationListener { GoogleMap mGoogleMap; Spinner mSprPlaceType; String[] mPlaceType=null; String[] mPlaceTypeName=null; double mLatitude=0; double mL

主要活动课 活动类别:

public class MapsActivity extends FragmentActivity implements LocationListener {

    GoogleMap mGoogleMap;
    Spinner mSprPlaceType;

    String[] mPlaceType=null;
    String[] mPlaceTypeName=null;

    double mLatitude=0;
    double mLongitude=0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        // Array of place types
        mPlaceType = getResources().getStringArray(R.array.place_type);

        // Array of place type names
        mPlaceTypeName = getResources().getStringArray(R.array.place_type_name);

        // Creating an array adapter with an array of Place types
        // to populate the spinner
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, mPlaceTypeName);

        // Getting reference to the Spinner
        mSprPlaceType = (Spinner) findViewById(R.id.spr_place_type);

        // Setting adapter on Spinner to set place types
        mSprPlaceType.setAdapter(adapter);

        Button btnFind;

        // Getting reference to Find Button
        btnFind = ( Button ) findViewById(R.id.btn_find);


        // Getting Google Play availability status
        int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());


        if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available

            int requestCode = 10;
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
            dialog.show();

        }else { // Google Play Services are available

            // Getting reference to the SupportMapFragment
            SupportMapFragment fragment = ( SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

            // Getting Google Map
            mGoogleMap = fragment.getMap();

            // Enabling MyLocation in Google Map
            mGoogleMap.setMyLocationEnabled(true);
我将活动更改为片段类,那么为什么应用程序会崩溃呢

活动类别:

super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, mPlaceTypeName);

mSprPlaceType = (Spinner) findViewById(R.id.spr_place_type);

btnFind = ( Button ) findViewById(R.id.btn_find);

int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);

SupportMapFragment fragment = ( SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

您需要将
returnrootview
移动到
onCreateView()
的最后一行,因为
return
语句之后的任何内容都是不可访问的,因此会出现错误

您还需要使用
rootView.findViewById()
而不是
getView().findViewById()
,因为在使用该方法时尚未创建视图,因此
getView()
返回
null
,您的应用程序可能会崩溃

编码

mSprPlaceType = (Spinner) rootView.findViewById(R.id.spr_place_type);
btnFind = ( Button ) rootView.findViewById(R.id.btn_find); 

注意:这并不能解决以后可能出现并导致应用程序崩溃的任何其他问题

如果在移动return语句时应用程序崩溃,则说明您遇到了与当前问题无关的问题,并且您已经修复了该问题,因为您的代码实际上已编译。如果您有新问题,请接受答案并发表新文章。在新问题中还包括崩溃日志,因为您的编辑没有指定应用程序崩溃的方式。是的,它现在显示界面,但由于此解决方案而崩溃,但由于某些原因它仍然崩溃。看看我编辑的问题,我已经指出了我只在编辑之前和之后更改的内容,您的编辑仍然显示在Fragment类中使用
getView()
。再次阅读此答案。我已将getView方法更改为rootview。您的活动代码显示
R.layout.activity\u maps
,但您的片段代码显示
R.layout.activity\u main
。你确定这是正确的吗?是的,我的布局是activity_main.xml,我将在编辑中发布我的日志cat
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, mPlaceTypeName);

mSprPlaceType = (Spinner) findViewById(R.id.spr_place_type);

btnFind = ( Button ) findViewById(R.id.btn_find);

int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);

SupportMapFragment fragment = ( SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_main, container, false);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, mPlaceTypeName);


mSprPlaceType = (Spinner) getView().findViewById(R.id.spr_place_type);

btnFind = ( Button ) getView().findViewById(R.id.btn_find);

int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity().getBaseContext());

Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, getActivity(), requestCode);

SupportMapFragment fragment = ( SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);

LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{in.wptrafficanalyzer.locationnearby/in.wptrafficanalyzer.locationnearby.MainActivity}: java.lang.ClassCastException: in.wptrafficanalyzer.locationnearby.MainActivity cannot be cast to android.app.Activity
                                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2515)
                                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)
                                                                                         at android.app.ActivityThread.access$900(ActivityThread.java:172)
                                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
                                                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                         at android.os.Looper.loop(Looper.java:145)
                                                                                         at android.app.ActivityThread.main(ActivityThread.java:5832)
                                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                                         at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
                                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
                                                                                      Caused by: java.lang.ClassCastException: in.wptrafficanalyzer.locationnearby.MainActivity cannot be cast to android.app.Activity
                                                                                         at android.app.Instrumentation.newActivity(Instrumentation.java:1079)
                                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2505)
                                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) 
                                                                                         at android.app.ActivityThread.access$900(ActivityThread.java:172) 
                                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422) 
                                                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                         at android.os.Looper.loop(Looper.java:145) 
                                                                                         at android.app.ActivityThread.main(ActivityThread.java:5832) 
                                                                                         at java.lang.reflect.Method.invoke(Native Method) 
                                                                                         at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
                                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
mSprPlaceType = (Spinner) rootView.findViewById(R.id.spr_place_type);
btnFind = ( Button ) rootView.findViewById(R.id.btn_find);