Google Maps V2中的碎片错误

时间:2013-10-14 02:10:22

标签: android google-maps android-fragments

我正在尝试创建一个涉及标签布局和地图的旅游应用。我从androidhive获得tab layout using fragments and viewpager,从wptrafficanalyzer获得google map。但是我遇到了很多错误,我不知道如何处理它们,因为这是我第一次处理碎片。我从android hive创建了自己的google地图版本,但是,我无法将其集成到我的标签布局中的一个标签中。有人可以帮忙吗?我会发布代码如果你需要它。谢谢!

这是我的MainActivity.java(谷歌地图)。

public class MainActivity extends FragmentActivity {

final Context context = this;
Button routes;
double latitude = 14.635576;
double longitude = 121.033115;
LatLng latlng = new LatLng(14.6353475, 121.0327501);
LatLngBounds QC = new LatLngBounds(
          new LatLng(14.656669, 120.998598), new LatLng(14.666965, 121.098934));
MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Shell").snippet("Sa tabi ng Estuar Building");
Marker mark;
GoogleMap map;
ArrayList<LatLng> markerPoints;
TextView tvDistanceDuration;

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

   routes = (Button) findViewById (R.id.buttonRoutes);
   routes.setBackgroundResource(R.drawable.drivinghires);

   tvDistanceDuration = (TextView) findViewById(R.id.tv_distance_time);


   routes.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View arg0) {

        // custom dialog
        final Dialog dialog = new Dialog(context);
        dialog.setContentView(R.layout.options);
        dialog.setTitle("Title...");

        // set the custom dialog components - text, image and button
        ImageView image = (ImageView) dialog.findViewById(R.id.image);
        image.setImageResource(R.drawable.jeep);
        ImageView image1 = (ImageView) dialog.findViewById(R.id.image1);
        image1.setImageResource(R.drawable.drivinghires);


        Button dialogButton = (Button) dialog.findViewById(R.id.buttonOk);
        // if button is clicked, close the custom dialog
        dialogButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });

        dialog.show();
      }
    });


   // Initializing
   markerPoints = new ArrayList<LatLng>();

   // Getting reference to SupportMapFragment of the activity_main
   SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);

   // Getting Map for the SupportMapFragment
   map = fm.getMap();



   // Set Compass Enabled

   map.getUiSettings().setCompassEnabled(true);
   map.getUiSettings().setRotateGesturesEnabled(true);

   // create marker


   // Changing marker icon
   marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.gasten));
   map.moveCamera(CameraUpdateFactory.newLatLngZoom(QC.getCenter(), 12));

   // Enable MyLocation Button in the Map
   map.setMyLocationEnabled(true);

   mark = map.addMarker(marker);

   //button






  map.setOnCameraChangeListener(new OnCameraChangeListener() {

        @Override
        public void onCameraChange(CameraPosition arg0) {

            // adding marker

            if(arg0.zoom <16){
               mark.setVisible(false);}
            else
                mark.setVisible(true);

            if(arg0.zoom > 17){
                mark.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.gasten));
            }




        }
    });

   // Setting onclick event listener for the map
   map.setOnMapClickListener(new OnMapClickListener() {

       @Override
       public void onMapClick(LatLng point) {

           // Already two locations
           if(markerPoints.size()>1){
               markerPoints.clear();
               map.clear();

               MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Shell").snippet("Sa tabi ng Estuar Building");

               // Changing marker icon
               marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.gasstation));

               // adding marker
              map.addMarker(marker);
           }

           // Adding new item to the ArrayList
           markerPoints.add(point);

           // Creating MarkerOptions
           MarkerOptions options = new MarkerOptions();

           // Setting the position of the marker
           options.position(point);

           /**
           * For the start location, the color of marker is GREEN and
           * for the end location, the color of marker is RED.
           */
           if(markerPoints.size()==1){
               options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
           }else if(markerPoints.size()==2){
               options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
           }

           // Add new marker to the Google Map Android API V2
           map.addMarker(options);

           // Checks, whether start and end locations are captured
           if(markerPoints.size() >= 2){
               LatLng origin = markerPoints.get(0);
               LatLng dest = markerPoints.get(1);

               // Getting URL to the Google Directions API
               String url = getDirectionsUrl(origin, dest);

               DownloadTask downloadTask = new DownloadTask();

               // Start downloading json data from Google Directions API
               downloadTask.execute(url);
           }
       }
   });
 }

 private String getDirectionsUrl(LatLng origin,LatLng dest){

   // Origin of route
   String str_origin = "origin="+origin.latitude+","+origin.longitude;

   // Destination of route
   String str_dest = "destination="+dest.latitude+","+dest.longitude;

   // Sensor enabled
   String sensor = "sensor=false";

   // Building the parameters to the web service
   String parameters = str_origin+"&"+str_dest+"&"+sensor;

   // Output format
   String output = "json";

   // Building the url to the web service
   String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters;

   return url;
 }

/** A method to download json data from url */
 private String downloadUrl(String strUrl) throws IOException{
    String data = "";
    InputStream iStream = null;
     HttpURLConnection urlConnection = null;
    try{
       URL url = new URL(strUrl);

       // Creating an http connection to communicate with url
       urlConnection = (HttpURLConnection) url.openConnection();

       // Connecting to url
       urlConnection.connect();

       // Reading data from url
       iStream = urlConnection.getInputStream();

       BufferedReader br = new BufferedReader(new InputStreamReader(iStream));

       StringBuffer sb  = new StringBuffer();

       String line = "";
       while( ( line = br.readLine())  != null){
           sb.append(line);
       }

       data = sb.toString();

       br.close();

   }catch(Exception e){
       Log.d("Exception while downloading url", e.toString());
   }finally{
       iStream.close();
       urlConnection.disconnect();
   }
   return data;
}

// Fetches data from url passed
private class DownloadTask extends AsyncTask<String, Void, String>{

   // Downloading data in non-ui thread
   @Override
   protected String doInBackground(String... url) {

       // For storing data from web service
       String data = "";

       try{
           // Fetching the data from web service
           data = downloadUrl(url[0]);
       }catch(Exception e){
           Log.d("Background Task",e.toString());
       }
       return data;
   }

   // Executes in UI thread, after the execution of
   // doInBackground()
   @Override
   protected void onPostExecute(String result) {
       super.onPostExecute(result);

       ParserTask parserTask = new ParserTask();

       // Invokes the thread for parsing the JSON data
       parserTask.execute(result);
   }
}

/** A class to parse the Google Places in JSON format */
private class ParserTask extends AsyncTask<String, Integer,    List<List<HashMap<String,String>>> >{

   // Parsing the data in non-ui thread
   @Override
   protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) {

       JSONObject jObject;
       List<List<HashMap<String, String>>> routes = null;

       try{
           jObject = new JSONObject(jsonData[0]);
           DirectionsJSONParser parser = new DirectionsJSONParser();

           // Starts parsing data
           routes = parser.parse(jObject);
       }catch(Exception e){
           e.printStackTrace();
       }
       return routes;
   }

   // Executes in UI thread, after the parsing process
   @Override
   protected void onPostExecute(List<List<HashMap<String, String>>> result) {
       ArrayList<LatLng> points = null;
       PolylineOptions lineOptions = null;
       MarkerOptions markerOptions = new MarkerOptions();
       String distance = "";
       String duration = "";

       if(result.size()<1){
           Toast.makeText(getBaseContext(), "No Points", Toast.LENGTH_SHORT).show();
           return;
       }

       // Traversing through all the routes
       for(int i=0;i<result.size();i++){
           points = new ArrayList<LatLng>();
           lineOptions = new PolylineOptions();

           // Fetching i-th route
           List<HashMap<String, String>> path = result.get(i);

           // Fetching all the points in i-th route
           for(int j=0;j<path.size();j++){
               HashMap<String,String> point = path.get(j);

               if(j==0){    // Get distance from the list
                   distance = (String)point.get("distance");
                   continue;
               }else if(j==1){ // Get duration from the list
                   duration = (String)point.get("duration");
                   continue;
               }

               double lat = Double.parseDouble(point.get("lat"));
               double lng = Double.parseDouble(point.get("lng"));
               LatLng position = new LatLng(lat, lng);

               points.add(position);
           }

           // Adding all the points in the route to LineOptions
           lineOptions.addAll(points);
           lineOptions.width(2);
           lineOptions.color(Color.RED);
       }

       tvDistanceDuration.setText("Distance:"+distance + ", Duration:"+duration);

       // Drawing polyline in the Google Map for the i-th route
       map.addPolyline(lineOptions);
   }
}
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

我尝试将其放入我的TabTwo.java

 public class TabTwo extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.activity_tab_two, container, false);

    return rootView;
}  

}

当我尝试在我的TabTwo上复制我的MainActivity.java时,会出现很多错误(setcontentview的创建方法,创建方法findViewById等等。)

0 个答案:

没有答案