尝试在Android Studio

时间:2016-09-13 08:58:15

标签: android android-actionbar

我对Android很陌生,并且已经通过在线视频的一些帮助自己学习。我试图使用两个活动来使用操作栏来回。第一个活动只是主要活动,第二个活动是地图活动。当我按下按钮从第一个活动转到第二个活动时,当通过模拟器运行时崩溃。

这是我的代码 -

  

主要活动

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //declare list view
        ListView listView = (ListView) findViewById(R.id.listView);
        //create array list called places using strings
        final ArrayList<String> places = new ArrayList<>();

        places.add("Add a new location");
        //create array adapter
        ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1,places);
        //set up list view to use array adapter
        listView.setAdapter(arrayAdapter);

        [![listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {][1]][1]

                Intent i = new Intent(getApplicationContext(), MapsActivity.class);

                i.putExtra("locationInfo",position);
                //start activity with intent of i
                startActivity(i);
            }
        });
    }
  

地图活动 -

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        ActionBar actionBar = getActionBar();

        actionBar.setDisplayHomeAsUpEnabled(true);

        Intent i = getIntent();

        Log.i("LocationInfo", Integer.toString(i.getIntExtra("locationInfo", -1)));

    }

似乎在线上崩溃 - actionBar.setDisplayHomeAsUpEnables(true);

我已导入操作栏库并更改了模拟器上的API级别,以查看是否存在问题。但是,由于我对Android的经验有限,我对此问题有所了解。

关于如何纠正问题的任何想法都会很棒。

Log Cat -

Log

主要活动的XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.lennydegriffa.memorableplaces.MainActivity">

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

地图活动的XML

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.lennydegriffa.memorableplaces.MapsActivity" />

2 个答案:

答案 0 :(得分:0)

请在地图活动中使用ActionBarActivity or AppCompatActivity class instead of FragmentActivity来设置操作栏。我的建议是AppCompatActivity
背后的原因是 -
如果您查看ActionBarActivityAppCompatActivity,那么它们会实现ActionBarDrawerToggle.DelegateProvider,而FragmentActivity则不会实现它。
为什么我建议AppCompatActivity因为ActionBarActivity 已弃用。


如果您使用支持v4库操作栏,那么我建议使用getSupportActionBar()代替getActionBar()

答案 1 :(得分:0)

只需检查你的style.xml,因为它可能是你已经完成的

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

更改为

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">