无法在活动内调用视图对象的方法

时间:2010-11-07 19:39:16

标签: java android methods view android-activity

在我的程序中,我有一个自定义视图对象。视图类中有一个名为foo的方法。出于某种原因,当我从我的活动中调用foo时,它不会触发。这是代码:

自定义视图的XML:

<com.company.application.MyView
    android:id="@+id/my_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

活动代码:

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();

    }
}

最后这里是foo:

public void foo() {
    mBackground = mContext.getResources().getDrawable(R.drawable.temp_canvas);
    Log.w(this.getClass().getName(), "background set");
}

按下按钮时始终会写入第一个日志,但第二个日志不是因为foo永远不会触发。这是什么交易?

先谢谢所有人。

修改:根据要求,完整视图

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);
    }
}

1 个答案:

答案 0 :(得分:0)

重新启动模拟器后,foo()现在被调用,它只是没有正确设置背景......但这是另一个问题。

相关问题