gpt4 book ai didi

java - 无法在 Activity 内调用 View 对象的方法

转载 作者:行者123 更新时间:2023-12-01 05:52:44 25 4
gpt4 key购买 nike

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

自定义 View 的 XML:

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

Activity 代码:

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 永远不会触发。这是什么交易?

提前感谢大家。

编辑:根据要求,完整 View

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

最佳答案

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

关于java - 无法在 Activity 内调用 View 对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4119327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com