Je crée un View
personnalisé qui nécessite la définition de quelques indicateurs dans les constructeurs. Les indicateurs ne sont définis nulle part ailleurs et sont enregistrés/restaurés dans les méthodes onSaveInstanceState
et onRestoreInstanceState
. Le problème est que lorsque j'essaie de l'utiliser, les drapeaux ne sont pas toujours définis. J'ai noté quel constructeur est utilisé pour chaque instance, mais il semble qu'il y ait des cas où aucun d'entre eux n'est utilisé. Je ne peux pas penser à un autre constructeur qui pourrait être appelé à la place.Les constructeurs ne sont pas appelés
public class TextViewCompat extends AppCompatTextView
{
private int constructor = 0;
private boolean isPreHoneycomb;
private boolean isPreJellybean;
public TextViewCompat(Context context)
{
this(context, null);
constructor = 1;
}
public TextViewCompat(Context context, AttributeSet attrs)
{
this(context, attrs, 0);
constructor = 2;
}
public TextViewCompat(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
isPreHoneycomb = Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB;
isPreJellybean = Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1;
constructor = 3;
}
@Override
public Parcelable onSaveInstanceState()
{
Log.d("Kevin", "onSaveInstanceState");
Bundle bundle = new Bundle();
bundle.putParcelable("instanceState", super.onSaveInstanceState());
bundle.putBoolean("isPreHoneycomb", isPreHoneycomb);
bundle.putBoolean("isPreJellybean", isPreJellybean);
return bundle;
}
@Override
public void onRestoreInstanceState(Parcelable state)
{
Log.d("Kevin", "onRestoreInstanceState");
if (state instanceof Bundle)
{
Bundle bundle = (Bundle) state;
isPreHoneycomb = bundle.getBoolean("isPreHoneycomb", Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB);
isPreJellybean = bundle.getBoolean("isPreJellybean", Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1);
state = bundle.getParcelable("instanceState");
}
super.onRestoreInstanceState(state);
}
@Override
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter)
{
Log.d("Kevin", "=================");
Log.d("Kevin", "constructor=" + constructor);
Log.d("Kevin", "isPreJellybean=" + isPreJellybean);
Log.d("Kevin", "isPreHoneycomb=" + isPreHoneycomb);
Log.d("Kevin", "=================");
super.onTextChanged(text, start, lengthBefore, lengthAfter);
}
}
Je sais que ce serait assez facile pour moi de travailler autour de cette question dans ce cas, parce que les drapeaux peuvent être recalculés à tout moment. Mais le fait est que les constructeurs ne sont pas appelés et seraient un problème pour tout autre drapeau que je voudrais garder.
Remarque: Les vues sont gonflées à partir de xml au lieu d'être programmées et testées sur un émulateur et un périphérique API 10 (les deux indicateurs doivent être true).
'super (contexte);' –
'super (context, attrs);' –
@MikeM. Je pense donc –