Im un noob per lo sviluppo Android e sto avendo problemi invalidando una vista. Sto usando il tutorial this e non ho problemi a implementarlo. Tuttavia, quando cambio lo sfondo della vista, risponde comunque come se lo sfondo precedente fosse ancora impostato. In altre parole, cambio la maschera ma la mia classe "touchview" non vede la nuova maschera. Non ho avuto fortuna ad usare invalidate per aggiornare la vista e ho verificato che la maschera sia effettivamente resettata come sfondo. Qualsiasi aiuto sarebbe molto apprezzato.Perché la vista personalizzata non è stata invalidata?
MIO CODICE
@Override
public boolean onMenuItemClick(com.actionbarsherlock.view.MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId())
{
case 1: // id from the xml file
if(isMale){
isMale=false;
item.setIcon(R.drawable.male_icon);
imageViewOriginal.setImageResource(R.drawable.woman_front);
imageViewFlip.setImageResource(R.drawable.woman_back);
if(isFrontView){
myMask.setBackgroundResource(R.drawable.woman_front_mask); //Mask changed here
}else{
myMask.setBackgroundResource(R.drawable.woman_back_mask); //Mask changed here
}
}else{
isMale=true;
item.setIcon(R.drawable.female_icon);
imageViewOriginal.setImageResource(R.drawable.man_front);
imageViewFlip.setImageResource(R.drawable.man_back);
if(isFrontView){
myMask.setBackgroundResource(R.drawable.man_front_mask); //Mask changed here
}else{
myMask.setBackgroundResource(R.drawable.man_back_mask); //Mask changed here
}
}
touchView.invalidate();
infoView.invalidate();
myMask.invalidate(); //Mask View Invalidated here
return true; // we handled the click, dont pass it up the chain
case 2: // id from the xml file
if(isFrontView){
isFrontView=false;
if(isMale){
myMask.setBackgroundResource(R.drawable.man_back_mask); //Mask changed here
}else{
myMask.setBackgroundResource(R.drawable.woman_back_mask); //Mask changed here
}
}else{
isFrontView=true;
if(isMale){
myMask.setBackgroundResource(R.drawable.man_front_mask); //Mask changed here
}else{
myMask.setBackgroundResource(R.drawable.woman_front_mask); //Mask changed here
}
}
FlipAnimator animator = new FlipAnimator(imageViewOriginal, imageViewFlip,
imageViewFlip.getWidth()/2, imageViewFlip.getHeight()/2);
if (imageViewOriginal.getVisibility() == View.GONE) {
animator.reverse();
}
flipLayout.startAnimation(animator);
touchView.invalidate();
infoView.invalidate();
myMask.invalidate(); //Mask View Invalidated here
return true;
}
return false;
}
Perché non usi R.id.itemId all'istruzione case, è più semplice. Sei sicuro che il tuo codice sia stato invocato? e il collegamento è rotto, per favore pubblica qui il tuo codice. – VinceStyling
Action Bar Sherlock mi consente di creare voci di menu con int ids. Il link sopra funziona e il codice è invocato. –