Info Window Customizada android map

Galera, estou com dificuldade de criar uma window customizada e não consigo entender o motivo.
Ao clicar no marcador queria que mostrasse as informações de quando ele foi criado, como lat, long, vel, data e tals.

Logo que inicializa aplicação, se clico no marcador ele funciona normalmente, mas quando ando e ele gera um novo marcador, se clico nele o aplicativo fecha. Ao debugar, vi que a Exception pega no setMarker(), ao instanciar o LinearLayout.

public class MainActivity extends Activity implements View.OnClickListener {

private Location location;
private static GoogleMap map;
private static MarkerOptions markerOptions;
private static List<MarkerOptions> rotaExecutada;
private static MarkerOptions currentPosition;
private Button rota;
private static Button atual;
private static View viewButton;
private SimpleDateFormat dt = new SimpleDateFormat("dd-mm-yyyy hh:mm:ss");
private Marker marker;

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

	initializeComponents();

	location = LocationUtil.getLocation(this);
	changeLocation(location);
}

public void initializeComponents() {
	map = ((MapFragment) getFragmentManager().findFragmentById(R.id.mapFragment)).getMap();
	rota = (Button) findViewById(R.id.btnRota);
	atual = (Button) findViewById(R.id.btnLocalAtual);
	rota.setOnClickListener(this);
	atual.setOnClickListener(this);
}

public void changeLocation(Location location) {

	if (location != null) {

		Date date = new Date();
		String dataFormat = dt.format(date);

		String msg = "Latitude: " + location.getLatitude() + "\n" + "Longitude: " + location.getLongitude() + "\n"
				+ "Velocidade: " + location.getSpeed() + "\n" + "Altitude: " + location.getAltitude() + "\n"
				+ "Data: " + dataFormat;

		LatLng currentPosition = new LatLng(location.getLatitude(), location.getLongitude());
		markerOptions = new MarkerOptions().position(currentPosition).title("Info: ").snippet(msg)
				.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_foot));
		map.moveCamera(CameraUpdateFactory.newLatLng(currentPosition));

		if (MainActivity.currentPosition == null)
			map.animateCamera(CameraUpdateFactory.zoomTo(18), 2000, null);

		if (viewButton == atual || viewButton == null)
			map.clear();

		setMarker(markerOptions);
		getRotaExecutada().add(markerOptions);
		MainActivity.currentPosition = markerOptions;

	}

}

public void setMarker(MarkerOptions markerOptions) {

	marker = map.addMarker(markerOptions);

// map.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
//
// @Override
// public void onInfoWindowClick(Marker marker) {
//
// if (marker.isInfoWindowShown()) {
// marker.hideInfoWindow();
// }
//
// }
// });

	map.setInfoWindowAdapter(new InfoWindowAdapter() {

		@Override
		public View getInfoWindow(Marker marker) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public View getInfoContents(Marker marker) {
			LinearLayout ll = null;
			try {
				ll = new LinearLayout(MainActivity.this); // java.lang.NullPointerException: Attempt to invoke virtual method 
														// 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
				
				ll.setPadding(20, 20, 20, 20);
				ll.setBackgroundColor(Color.WHITE);

				TextView tv = new TextView(MainActivity.this);
				tv.setText(marker.getSnippet());
				ll.addView(tv);
			} catch (Exception e) {
				Log.writeLog(true, e.getMessage());
			}
			
			return ll;
			
		}
	});

}

@Override
public void onClick(View view) {
	MainActivity.viewButton = view;
	if (view == findViewById(R.id.btnLocalAtual)) {
		mostrarAtual();
	} else if (view == findViewById(R.id.btnRota)) {
		mostrarRota();
	}
}

private void mostrarAtual() {
	map.clear();
	marker = map.addMarker(currentPosition);
	map.moveCamera(CameraUpdateFactory.newLatLng(currentPosition.getPosition()));
	map.animateCamera(CameraUpdateFactory.zoomTo(20), 2000, null);
}

private void mostrarRota() {
	for (MarkerOptions markerOption : getRotaExecutada()) {
		marker = map.addMarker(markerOption);
	}
	map.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null);
}

public static List<MarkerOptions> getRotaExecutada() {
	if (rotaExecutada == null)
		rotaExecutada = new ArrayList<MarkerOptions>();
	return rotaExecutada;
}

}

Bom dia, voce pode estar adicionando ao invés do latitude longitude no marcador voce ta adicionado a posição no mapa, por isso que quando voce anda no mapa ele aparece. O mapa se nao me engano é dividido em varias partes mais ou menos assim, Coluna A B C D e Linha 1 2 3 4. Voce pode estar add na posicao do mapa e nao na lat/long.