gpt4 book ai didi

android - 自定义 InfowindowAdapter 以添加来自 Content provider 的图像

转载 作者:搜寻专家 更新时间:2023-10-30 20:40:36 25 4
gpt4 key购买 nike

我有一个在 map 上显示带有标记的地点的应用程序,我自定义了信息窗口以显示创建的地点的内容、标题、描述和图片,这些数据是通过内容提供商访问的,我的问题一切顺利直到我从数据库中删除一条记录,应用程序才会发疯,或者坏了,或者只是奇怪地识别记录 ID 等等问题显然出在 infowindow 代码自定义中,因为删除它一切正常,创建、删除、创建标记等 .. 但即使我尝试过也没有给出错误。

hell 代码:

class MyInfoWindowAdapter implements InfoWindowAdapter {

View v;

MyInfoWindowAdapter() {
v = getLayoutInflater().inflate(R.layout.custom_info, null);

}

@SuppressWarnings("deprecation")
@Override
public View getInfoWindow(final Marker marker) {

MapaLugaresActivity.this.marker = marker;

c.requery();

TextView tvTitulo = (TextView) v.findViewById(R.id.tituloi);
tvTitulo.setText(marker.getTitle());
// TextView tvDescr = (TextView) v.findViewById(R.id.descripcioni);
// tvDescr.setText(marker.getSnippet());
ImageView imgi = (ImageView) v.findViewById(R.id.imgi);

if (marker.getSnippet() != null && marker != null
&& c.getCount() > 0) {

try {

if (c.moveToFirst()) {

c.moveToPosition(Integer.valueOf(marker.getSnippet()) - 1);

String img = c.getString(c.getColumnIndex("foto"));

if (img != null) {

resizedBitmap = DecodeImagen
.decodeSampledBitmapFromFile(img, 100, 100);
imgi.setAdjustViewBounds(true);
imgi.setImageBitmap(resizedBitmap);

} else {

imgi.setAdjustViewBounds(true);
imgi.setImageResource(R.drawable.paisaje);

}

}
} catch (NumberFormatException e) {

e.printStackTrace();
}

}
// imgi.setImageResource(R.drawable.rdlv);

Typeface fuente = Typeface.createFromAsset(getAssets(),
"TravelingTypewriter.ttf");

tvTitulo.setTypeface(fuente);
// tvDescr.setTypeface(fuente);

return v;

}

@Override
public View getInfoContents(Marker marker) {
if (MapaLugaresActivity.this.marker != null
&& MapaLugaresActivity.this.marker.isInfoWindowShown()) {
MapaLugaresActivity.this.marker.hideInfoWindow();
MapaLugaresActivity.this.marker.showInfoWindow();
}

return null;
}

}

添加标记:

                 @SuppressWarnings("deprecation")
public void addMarker() {

map.clear();
c.requery();

if (c.getCount() > 0) {

c.moveToFirst();

do {

latlong = new LatLng(c.getFloat(c.getColumnIndex("latitud")),
c.getFloat(c.getColumnIndex("longitud")));
final MarkerOptions marker = new MarkerOptions().title(c
.getString(c.getColumnIndex("titulo")));
marker.snippet(c.getString(c.getColumnIndex("_id")));

marker.position(latlong);

map.addMarker(marker).showInfoWindow();

} while (c.moveToNext());

} else {
Toast.makeText(MapaLugaresActivity.this, "Añada un nuevo lugar",
Toast.LENGTH_SHORT).show();
}

}

我提前感谢您的帮助,花了几天时间试图找到解决方案,我认为是时候寻求帮助了,谢谢。本人编程经验有限,望谅解

PS:项目我已经上传到GitHub上了,方便大家分析:D

Activity MapaLugaresActivity中的代码

https://github.com/Shochlves/rdlv

图像信息窗口:

https://lh5.ggpht.com/eBgrw0riQxfGph4FhxXvMRDxzYjlvdWw6L6qRqg_L1oV9yPGHPW9wV2Cal7zVGj1-HY=h900-rw

最佳答案

解决了!该解决方案已实现 Hastable ( http://developer.android.com/reference/java/util/Hashtable.html ),我点击了代码,因为它很有帮助。带有来自 SQLite(内容提供者)的图像和标题的 InfoWindowAdapter

信息窗口适配器:

public class MyInfoWindowAdapter implements InfoWindowAdapter {



private View v;

MyInfoWindowAdapter() {
v = getLayoutInflater().inflate(R.layout.custom_info, null);

}
@Override
public View getInfoContents(Marker marker) {
if (MapaLugaresActivity.this.marker != null
&& MapaLugaresActivity.this.marker.isInfoWindowShown()) {
MapaLugaresActivity.this.marker.hideInfoWindow();
MapaLugaresActivity.this.marker.showInfoWindow();
}

return null;
}

@Override
public View getInfoWindow(Marker marker) {

MapaLugaresActivity.this.marker = marker;
String img = null;

if (marker.getId() != null && markers != null && markers.size() > 0) {
if ( markers.get(marker.getId()) != null &&
markers.get(marker.getId()) != null) {
img = markers.get(marker.getId());
}
}
final ImageView imgi = (ImageView) v.findViewById(R.id.imgi);

if (img != null && !img.equalsIgnoreCase("null")
&& !img.equalsIgnoreCase("")) {

Bitmap resizedBitmap = DecodeImagen
.decodeSampledBitmapFromFile(img, 100, 100);

imgi.setImageBitmap(resizedBitmap);

} else {
imgi.setAdjustViewBounds(true);
imgi.setImageResource(R.drawable.paisaje);
}


TextView tvTitulo = (TextView) v.findViewById(R.id.tituloi);
tvTitulo.setText(marker.getTitle());
//TextView tvDescr = (TextView) v.findViewById(R.id.descripcioni);
//tvDescr.setText(marker.getSnippet());



Typeface fuente = Typeface.createFromAsset(getAssets(),
"TravelingTypewriter.ttf");

tvTitulo.setTypeface(fuente);
// tvDescr.setTypeface(fuente);


return v;

}



}

添加标记:

public void addMarker() {

markers = new Hashtable<String, String>();
c.requery();

if (c.getCount() > 0) {

c.moveToFirst();

do {


latlong = new LatLng(c.getFloat(c.getColumnIndex("latitud")),
c.getFloat(c.getColumnIndex("longitud")));
final Marker marker = map.addMarker(new MarkerOptions().title(c
.getString(c.getColumnIndex("titulo"))).snippet(c.getString(c.getColumnIndex("_id"))).position(latlong));

markers.put(marker.getId(), c.getString(c.getColumnIndex("foto")));



} while (c.moveToNext());

} else {
Toast.makeText(MapaLugaresActivity.this, "Añada un nuevo lugar",
Toast.LENGTH_SHORT).show();
}

}

创建时:

if (map != null) {
map.setInfoWindowAdapter(new MyInfoWindowAdapter());

addMarker();
}

一句问候

关于android - 自定义 InfowindowAdapter 以添加来自 Content provider 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21805454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com