Detail Page from Click Marker on Map Android (Mendapatkan Detail di Halaman Baru setelah Klik Marker)

I get this problem when I want to show the detail information from the database SQLite when I click the marker of GoogleMap Android. Check it out the MainActivity.java below.

Problem ini bermula ketika aplikasi telah memunculkan marker yang datanya tersimpan dalam SQLite, namun keinginan saya adalah ketika marker diklik maka berpindah halaman dan menampilkan data detail dari suatu id data yang dipilih.  Bagaimana caranya? Berikut ini MainActivity.java nya.

package com.data;

import java.io.IOException;
import java.util.HashMap;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener;
import com.google.android.gms.maps.GoogleMap.OnMarkerClickListener;
import com.google.android.gms.maps.SupportMapFragment;
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 android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class Home extends FragmentActivity implements OnClickListener,  OnMarkerClickListener{
 Button list,about;
 GoogleMap googleMap;
 DBHelper dbhelper;
 String id, nama, alamat, harga, telepon, jenis_lapangan, fasilitas, latitude, longitude;
 Marker marker;
 @SuppressWarnings("rawtypes")
        HashMap<String, HashMap>extraMarkerInfo = new HashMap<String, HashMap>();
 
 @Override
 protected void onCreate(Bundle arg0) {
  // TODO Auto-generated method stub
  super.onCreate(arg0);
  setContentView(R.layout.home);
  list=(Button)findViewById(R.id.list);
  about=(Button)findViewById(R.id.about);
  
  list.setOnClickListener(this);
  about.setOnClickListener(this);
  
  try {
   LatLng posisi = new LatLng(-7.825, 110.368);
   SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
   googleMap = fm.getMap();
   googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(posisi,12));
   //googleMap.setOnMarkerClickListener(this);
   
   
  } catch (Exception e) {
   // TODO: handle exception
  }
  
  dbhelper = new DBHelper(this);
  try {
   dbhelper.createDataBase();
  } catch (IOException e) {
   // TODO: handle exception
   e.printStackTrace();
  }
  Cursor c = dbhelper.getData();
  
     c.moveToFirst();
  while (c.moveToNext()){
   
    HashMap data = new HashMap();
       data.put("id",c.getString(0));
       data.put("nama",c.getString(1));
       data.put("alamat",c.getString(2));
       data.put("harga",c.getString(3));
       data.put("telepon",c.getString(4));
       data.put("jenis_lapangan",c.getString(5));
       data.put("fasilitas",c.getString(6));
       data.put("latitude",c.getString(7));
       data.put("longitude",c.getString(8));

       Marker marker = googleMap.addMarker(new MarkerOptions()
          .position(new LatLng(Double.valueOf(c.getString(7)) , Double.valueOf(c.getString(8))))
          .title(c.getString(1))
          .snippet(c.getString(0)));
       
       // Save this marker data in your previously made HashMap mapped to the marker ID. So you can get it back based on the marker ID
       extraMarkerInfo.put(marker.getId(),data);
       googleMap.setOnMarkerClickListener((OnMarkerClickListener) this);
  }
   
 }
  
 
 @Override
 public boolean onMarkerClick(Marker marker) {
  // TODO Auto-generated method stub
  
  HashMap marker_data = extraMarkerInfo.get(marker.getId());
     //Toast.makeText(getApplicationContext(), marker_data.get("nama"), Toast.LENGTH_SHORT).show();
     Intent x = new Intent(getApplicationContext(),Detail.class);
     
     x.putExtra("nama", marker_data.get("nama"));
  x.putExtra("alamat",marker_data.get("alamat"));
  x.putExtra("harga", marker_data.get("harga"));
  x.putExtra("telepon", marker_data.get("telepon"));
  x.putExtra("jenis_lapangan", marker_data.get("jenis_lapangan"));
  x.putExtra("fasilitas", marker_data.get("fasilitas"));
  x.putExtra("latitude", marker_data.get("latitude"));
  x.putExtra("longitude", marker_data.get("longitude"));
  startActivity(x);
  
     return false;
 }

}

In this case, we just make a new variable of HashMap for the temporary place from the SQLite database. The DBHelper.java you can see below.

Pada intinya kita membuat variabel HashMap baru sebagai penampung data dari SQLite. Untuk DBHelper.javanya sebagai berikut ini


package com.data;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {
 private static String DB_Name = "data.sqlite";
 private SQLiteDatabase db;
 private final Context context;
 private String DB_PATH;
 private SQLiteDatabase sqliteDBInstance = null;
 
 public DBHelper (Context context) {
  super(context, DB_Name, null, 1);
  this.context = context;
  DB_PATH = "/data/data/"+context.getPackageName()+"/"+"databases/";
 }
 
 public void createDataBase() throws IOException {
  boolean dbExist = checkDataBase();
  if (dbExist) {
   
  } else {
   this.getReadableDatabase();
   try {
    copyDataBase();
   } catch (IOException e) {
    throw new Error ("Error copying database");
    // TODO: handle exception
   }
  }
 }
 
 private boolean checkDataBase() {
  File dbFile = new File (DB_PATH + DB_Name);
  return dbFile.exists();
 }
 
 private void copyDataBase() throws IOException {
  InputStream myInput = context.getAssets().open(DB_Name);
  String outFileName = DB_PATH + DB_Name;
  OutputStream myOutput = new FileOutputStream(outFileName);
  byte[] buffer = new byte [1024];
  int length;
  while ((length = myInput.read(buffer)) > 0) {
   myOutput.write(buffer,0,length);
  }
  myOutput.flush();
  myOutput.close();
  myInput.close();
 }
 
 public Cursor getData() {
  try {
   String myPath = DB_PATH + DB_Name;
   db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
   
  } catch (Exception e) {
   // TODO: handle exception
  }
  Cursor c = db.rawQuery("SELECT * FROM data order by nama", null);
  return c;
    
 }
 
 

 @Override
 public void onCreate(SQLiteDatabase arg0) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
  // TODO Auto-generated method stub
  
 }

}

Post a Comment

Lebih baru Lebih lama