【发布时间】:2017-11-10 17:23:37
【问题描述】:
由于 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;
}
}
【问题讨论】:
-
能否请您添加
WorldTabBar的代码 - 它扩展了哪个类? -
我在代码中添加了 WorldTabBar 类。
-
如果您想从活动类开始片段,请查看此链接:teamtreehouse.com/community/…。它可能会帮助你。
标签: android android-fragments android-intent onclicklistener android-fragmentactivity