簡體   English   中英

在FragmentActivity中使用什么代替startActivity(intent)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM