[英]What to use instead of startActivity(intent) in FragmentActivity?
由於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;
}
}
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 {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.