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