在FragmentActivity中使用什么而不是startActivity(intent)?

时间:2017-11-10 17:23:37

标签: android android-fragments android-intent onclicklistener android-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;
    }


    }

1 个答案:

答案 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 {