Dans mon programme, j'ai un objet de vue personnalisé. A l'intérieur de la classe de vue est une méthode appelée foo. Pour une raison quelconque, quand j'appelle foo de mon activité, elle ne se déclenche pas. Voici le code:Impossible d'appeler une méthode d'un objet de vue dans une activité
XML de la vue personnalisée:
<com.company.application.MyView
android:id="@+id/my_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Le code d'activité:
public class Main extends Activity {
MyView mView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = li.inflate(R.layout.main, null);
mView= (MyView) v.findViewById(R.id.my_view);
//A button to fire the method inside foo()
Button switchLeft = (Button) findViewById(R.id.switch_left);
switchLeft.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
callTest();
}
});
}
public void callTest() {
Log.w(this.getClass().getName(), "clicked left arrow");
mView.foo();
mView.postInvalidate();
}
}
est enfin ici foo:
public void foo() {
mBackground = mContext.getResources().getDrawable(R.drawable.temp_canvas);
Log.w(this.getClass().getName(), "background set");
}
Le premier journal est toujours écrit lorsque le bouton est enfoncé, mais le deuxième journal n'est pas parce que foo ne se déclenche jamais. Quel est le problème ici?
Merci d'avance tous.
Edit: sur demande, la vue complète
public class MyView extends View {
Drawable mBackground;
Context mContext;
public MyView (Context context) {
super(context);
mContext = context;
mBackground = mContext.getResources().getDrawable(R.drawable.leftarrow1);
}
public MyView (Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
mBackground = mContext.getResources().getDrawable(R.drawable.leftarrow1);
}
public void foo() {
mBackground = mContext.getResources().getDrawable(R.drawable.temp_canvas);
Log.w(this.getClass().getName(), "background set");
}
@Override
public void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
// draw a solid blue circle
paint.setColor(Color.BLUE);
canvas.drawCircle(20, 20, 15, paint);
// draw a test background
mBackground.setBounds(0, 0, 300, 400);
mBackground.draw(canvas);
}
}
Nous devons voir le code de MyView – Falmarri
Demandez et vous recevrez. Merci! – user432209
Cela peut être évident, mais avez-vous essayé de parcourir le code avec le débogueur? Et si ce n'est pas possible, avez-vous essayé d'écrire dans le journal avant de définir l'arrière-plan (mais dans foo) et aussi avec un autre niveau de journal (par exemple, debug ou info)? –