由于FragmentActivity中的某些原因,startActivity()无法正常工作,当我点击我的按钮时,它会崩溃应用程序,我收到以下错误:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.name.app/com.example.name.app.WorldTabBar}: java.lang.ClassCastException: com.example.name.app.WorldTabBar cannot be cast to android.app.Activity
这是我的代码:
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback{
Button live;
private GoogleMap mMap;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
final SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
live=findViewById((R.id.GoToLive));
live.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
Intent startIntent = new Intent(MapsActivity.this, WorldTabBar.class);
startActivity(startIntent);
}
});
startActivity()在FragmentActivity中崩溃了应用程序。 FragmentActivity不允许我使用getActivity(),因为我只是想使用" .this"但这不适用于startActivity()。
我试过而不是FragmentActivity,只使用扩展Fragment并使用rootView将onCreate更改为onCreateView方法,然后在任何地方添加getActivity()
getActivity().startActivity(startIntent); //<-didn't work, crashes again
这是我的manifest.xml:
</activity>
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/title_activity_main" />
<activity android:name=".WorldTabBar" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/myKey" />
<activity
android:name=".MapsActivity"
android:label="@string/title_activity_maps"></activity>
</application>
也许有我可以使用的东西而不是startActivity()但它会做同样的动作吗?事实上......
Intent startIntent = new Intent(MapsActivity.this, WorldTabBar.class);
... ^上面的代码本身没有startActivity(),但是我觉得没有开始代码,现在我的overridePendingTransition代码没有得到识别。那么我可以在FragmentActivity中使用哪些代码像startActivity()那样工作但是不是startActivity()?
编辑:
WorldTabBar类:
public class WorldTabBar extends Fragment {
Button world;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_world_tabbar, container, false);
world=rootView.findViewById(R.id.GoToWorld);
world.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent startIntent = new Intent(getContext(), MapsActivity.class);
startActivity(startIntent);
getActivity().overridePendingTransition(R.anim.slide_in_right, R.anim.no_anim);
}
});
return rootView;
}
}
答案 0 :(得分:1)
java.lang.ClassCastException:com.example.name.app.WorldTabBar无法强制转换为android.app.Activity
您的WorldTabBar
延伸Fragment
,而非Activity
课程。
1)您需要添加活动,然后将WorldTabBar
片段添加到其中。
例如,创建WorldTabBarActivity
扩展Activity
,在使用此活动时在清单上注册它:
Intent startIntent = new Intent(MapsActivity.this, WorldTabBarActivity.class);
将片段添加到活动(使用XML)的选项之一:https://developer.android.com/training/basics/fragments/creating.html。另一个选择 - 在运行时添加片段 - https://developer.android.com/training/basics/fragments/fragment-ui.html#AddAtRuntime
2)更改代码以使其活动:
public class WorldTabBar extends AppCompatActivity {