我正在以编程方式创建一些按钮,我以这种方式添加了按钮:
final Button btn = new Button(this);
btn.setText(array.get(i));
btn.setTextSize(10);
btn.setTextColor(getColor(R.color.white));
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
goToModule(texto);
}
});
btn.setHeight(height);
btn.setWidth(width);
btn.setOnTouchListener(parentListener);
btn.post(new Runnable() {
@Override
public void run() {
btn.setCompoundDrawablesWithIntrinsicBounds(null,getDrawableForText(texto),null, null);
btn.setPadding(0,35,0,0);
btn.setBackground(gd);
btn.setLayoutParams(params);
}
});
row1.addView(btn);
最多可以绘制19个按钮。它们位于ViewFlippers内部,因此用户可以在页面之间进行页面
getDrawableForText方法:
private Drawable getDrawableForText(String texto) {
Drawable drawable=null;
if(texto.equalsIgnoreCase("Viajes")){
Log.i("LOG", "This drawable is the problematic one");
}
if (texto.equals(textosBotones[0])) {
drawable=getResources().getDrawable(R.drawable.vuelo,getTheme());//Viajes
} else if (texto.equals(textosBotones[1])) {
drawable=getResources().getDrawable(R.drawable.hotel,getTheme());//Hotel
} else if (texto.equals(textosBotones[2])) {
drawable=getResources().getDrawable(R.drawable.agenda,getTheme());//Agenda
/*int h = btn.getHeight()-100;
int w = btn.getWidth()-100;
drawable.setBounds( 0, 0, w, h );
Bitmap icon= BitmapFactory.decodeResource(getResources(),R.drawable.agenda);
Bitmap newbitMap = Bitmap.createScaledBitmap(icon,w,h, true);
dr = new BitmapDrawable(EventActivity.this.getResources(), newbitMap);*/
} else if (texto.equals(textosBotones[3])) {
drawable=getResources().getDrawable(R.drawable.ponentes,getTheme());//Ponentes
} else if (texto.equals(textosBotones[4])) {
drawable=getResources().getDrawable(R.drawable.documentos,getTheme());//Documentos
} else if (texto.equals(textosBotones[5])) {
drawable=getResources().getDrawable(R.drawable.ubicacion,getTheme());//Ubicaciones
} else if (texto.equals(textosBotones[6])) {
drawable=getResources().getDrawable(R.drawable.contactos,getTheme());//Contactos
} else if (texto.equals(textosBotones[7])) {
//drawable=getResources().getDrawable(R.drawable.preguntas,getTheme());//Encuestas
drawable=getResources().getDrawable(R.drawable.valoracion,getTheme());//Encuestas/valoraciones
} else if (texto.equals(textosBotones[8])) {
drawable=getResources().getDrawable(R.drawable.qr,getTheme());//Distintivo/best business
} else if (texto.equals(textosBotones[9])) {
drawable=getResources().getDrawable(R.drawable.info,getTheme());//Forum
} else if (texto.equals(textosBotones[10])) {
drawable=getResources().getDrawable(R.drawable.galeria,getTheme());//Galería
} else if (texto.equals(textosBotones[11])) {
drawable=getResources().getDrawable(R.drawable.chat,getTheme());//Chats
} else if (texto.equals(textosBotones[12])) {
drawable=getResources().getDrawable(R.drawable.muro,getTheme());//Muro
} else if (texto.equals(textosBotones[13])) {
drawable=getResources().getDrawable(R.drawable.asistentes,getTheme());//Asistentes
} else if (texto.equals(textosBotones[14])) {
drawable=getResources().getDrawable(R.drawable.twitter,getTheme());//Twitter
} else if (texto.equals(textosBotones[15])) {
drawable=getResources().getDrawable(R.drawable.twitter,getTheme());//Facebook
} else if (texto.equals(textosBotones[16])) {
drawable=getResources().getDrawable(R.drawable.twitter,getTheme());//Instagram
} else if (texto.equals(textosBotones[17])) {
drawable=getResources().getDrawable(R.drawable.qr,getTheme());//QR
} else if (texto.equals(textosBotones[18])) {
drawable=getResources().getDrawable(R.drawable.valoracion,getTheme());//Proveedores
} else if (texto.equals(textosBotones[19])){
/*drawable = DrawableCompat.wrap(getResources().getDrawable(R.drawable.trophy,getTheme()));
DrawableCompat.setTint(drawable, getColor(R.color.white));*/
/*drawable=getResources().getDrawable(R.drawable.trophy,getTheme());
Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(wrappedDrawable, getColor(R.color.white));
drawable=wrappedDrawable;*/
drawable=getResources().getDrawable(R.drawable.actividad, getTheme());//Actividades
}else if(texto.equals(textosBotones[20])){
drawable=getResources().getDrawable(R.drawable.noticias,getTheme());
}else{
Log.i("LOG", "Something weird happened");
}
return drawable;
}
我第一次进入此活动,可绘制对象绘制正确。但是,如果我单击其中一个按钮(转到另一个活动),并且在该新活动内部,则单击一个按钮,该按钮转到第三个活动,如果我返回到主活动(按钮所在的位置)是一个未绘制的可绘制对象,它始终是第一个。其余按钮的其余可绘制对象均被确定为正常。
不再重新创建主活动,它保留在内存中。无论如何,如果我再次绘制它,也会发生相同的怪异行为。
我很迷茫,因为第三个活动不会以任何方式影响第一个活动。
有人可以指导我发生什么事情?
谢谢。
PD:如果您需要更多详细信息,请告诉我。
编辑:
在第三项活动中,我正在执行以下操作:
private void getArrivalsFromJSON(String resp) {
arrivals=new ArrayList<>();
ArrivalModel all=new ArrivalModel();
all.setDestination("");
all.setTerminal("ALTTODO");
all.setType("");
arrivals.add(all);
try {
JSONObject json=new JSONObject(resp);
JSONArray data=json.getJSONArray("data");
for(int i=0;i<data.length();i++){
JSONObject obj=data.getJSONObject(i);
ArrivalModel arrival=new ArrivalModel();
arrival.setDestination(obj.getString("destination"));
arrival.setTerminal(obj.getString("terminal"));
arrival.setType(obj.getString("type"));
arrivals.add(arrival);
}
generateLayout();
} catch (JSONException e) {
e.printStackTrace();
}
}
在那方面,如果我修改以下行:
for(int i=0;i<data.length();i++)
并像这样更改它:
for(int i=0;i<data.length()-7;i++)
可绘制按钮正常绘制!我已经签入Android Studio探查器,并且它从未使用超过90Mb的RAM。太多了吗?
答案 0 :(得分:0)
我发现了错误。与内存或其他性能问题无关。
发生的是,在第三个活动中,我使用的是按钮中使用的.png字体,但是我正在更改其颜色:
d.setColorFilter(new PorterDuffColorFilter(Color.parseColor(color), PorterDuff.Mode.MULTIPLY));
因此,当我回到第一个Activity并尝试绘制Drawable时,它正在绘制,但是其颜色发生了变化。假定按钮的颜色与我用来更改可绘制对象的颜色相同,则似乎未绘制可绘制对象。事实上它正在绘制,但不可见。