1

I am trying to create a tourism app that involves a tab layout and a map. I got my tab layout using fragments and viewpager from androidhive and google map from wptrafficanalyzer. However I am experiencing a lot of errors, and I don't know how to deal with them since this is my first time dealing with fragments. I created my own version of the google maps from android hive, however, I can't integrate it in one of the tabs in my tab layout. Can anyone please help? I'll post the code If you need it. Thanks!

Here is my MainActivity.java (Google Map).

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;
}

}

I try to put it in my 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;
}  

}

When I try to copy my MainActivity.java on my TabTwo, lot of errors appear (create method for setcontentview, create method findViewById etc..)

Jeongbebs
  • 4,100
  • 7
  • 34
  • 60

0 Answers0