我已在论坛中阅读了几个问题,并在我的代码上进行了尝试。但我的应用程序中的此功能尚未运行。
我有两项活动。第一个是MapsActivity.java。它包含一个谷歌地图,我添加了一些标记(使用谷歌地图Android API创建)。第二个是supersural.java。 我已经能够从第一个活动转移到第二个活动。 在第二个活动中,我在底部插入了一个选项菜单,我想为每个选项启动不同的活动。 第一个选项是一个图标,单击该图标时,应该将我带回MapsActivity.java 由于我不明白的原因,当我点击图标时,没有任何反应。
我认为我的代码与问题相关:
我已宣布我的两项活动的AndroidManifest文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mgiannone.dublinfarmersmarket" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/google_maps_key" />
<activity
android:name=".MapsActivity"
android:label="@string/title_activity_maps" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".supernatural"
android:label="@string/title_activity_supernatural" >
</activity>
</application>
菜单.xml文件
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.mgiannone.dublinfarmersmarket.supernatural">
<item android:id="@+id/action_settings" android:title="@string/action_settings"
android:orderInCategory="100" app:showAsAction="never" />
<item android:id="@+id/map"
android:title="@string/iconMap"
android:orderInCategory="200"
android:icon="@drawable/ic_action_maps_place"
app:showAsAction="always"/>
<item android:id="@+id/review"
android:title="@string/iconReview"
android:orderInCategory="200"
android:icon="@drawable/ic_action_action_question_answer"
app:showAsAction="always"/>
</menu>
supenatural.java类
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v7.widget.Toolbar;
public class supernatural extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_supernatural);
//declare a Toolabr and inflate it
Toolbar myToolbar = (Toolbar)findViewById(R.id.myToolbar);
myToolbar.inflateMenu(R.menu.menu_supernatural);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_supernatural, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//handling the options selected
switch (item.getItemId()) {
case R.id.map:
// Map option clicked.
Intent intentMap = new Intent(this, MapsActivity.class);
this.startActivity(intentMap);
return true;
case R.id.review:
// Review option clicked.
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
目前我唯一能想到的是MapsActivity.java文件存在的某种问题。我应该使用特定方法来调用使用Google Maps Android API创建的此类活动吗? 为了完整起见,我还要添加MapsActivity.java类的代码:
import android.content.Intent;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap myMap) {
// Move the camera to Dublin
myMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(53.345350459503486, -6.272483224804773), 12));
//Set the markers on the map
Marker greenDoor = myMap.addMarker(new MarkerOptions()
.position(new LatLng(53.33783832056784, -6.277552599842919)) //set latitude and longitude
.title("The Green Door") //set a title for the marker
.snippet("18 Newmarket, Dublin 8") //set additional text for the marker once it is touched by the user
.icon((BitmapDescriptorFactory.fromResource(R.drawable.farmstand))) //change the default icon to a customized one imported in 'drawable'
);
Marker supernaturalFM = myMap.addMarker(new MarkerOptions()
.position(new LatLng(53.342849229144676, -6.242303008969202))
.title("Supernatural")
.snippet("114 - 116 Pearse Street, Dublin 2")
.icon((BitmapDescriptorFactory.fromResource(R.drawable.farmstand)))
);
myMap.setOnInfoWindowClickListener(
new OnInfoWindowClickListener(){
public void onInfoWindowClick(Marker supernaturalFM){
Intent nextScreen = new Intent(MapsActivity.this,supernatural.class);
startActivity(nextScreen);
}
}
);
};
答案 0 :(得分:0)
尝试在交换机中添加断点:插入break
;在所有情况下return true;
之后
如果您不使用break
,则调用的操作将是最后一次
答案 1 :(得分:0)
我建议你在每个案例结束时使用break,然后你可以使用:
Intent act = new Intent(this, MapsActivity.class);
startActivity(act);
但是,如果你想从第二个活动接收数据,你应该在第一个活动中使用startActivityForResult(),所以你有一个返回值
<强>更新强> 这是这种方法的基本结构:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
int id = item.getItemId();
if (id == R.id.my_id)
{
return true;
}
else
if (id == R.id.second_id)
{
Toast.makeText(this, "you press a button!, success ", Toast.LENGTH_LONG).show();
Intent act = new Intent(this, MapsActivity.class);
startActivity(act);
return true;
}
return super.onOptionsItemSelected(item);
}
答案 2 :(得分:0)
你绝对是在正确的轨道上,但你需要纠正一个小错误。
在个人break
中使用case
。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.map:
// Map option clicked.
Intent intentMap = new Intent(this, MapsActivity.class);
this.startActivity(intentMap);
break;
case R.id.review:
// Review option clicked.
break;
}
return super.onOptionsItemSelected(item);
}