我无法从“活动”中调用自定义视图(“ canvasview”)的方法来设置包括视图在内的布局。我什至不能从该活动中调用canvasview的“获取器”。
另外,我将视图传递给自定义类(不扩展Activity),也无法从我的自定义类调用canvasview的方法。
我不确定自己在做什么错...
GameActivity.java:
public class GameActivity extends Activity implements OnClickListener
{
private View canvasview;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.game_layout);
canvasview = (View) findViewById(R.id.canvasview);
// Eclipse displays ERROR con those 2 method calls:
int w = canvasview.get_canvaswidth();
int h = canvasview.get_canvasheight();
(...)
game_layout.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".GameActivity" >
(...)
<com.example.test.CanvasView
android:id="@+id/canvasview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
CanvasView.java:
public class CanvasView extends View
{
private Context context;
private View view;
private int canvaswidth;
private int canvasheight;
public CanvasView(Context context, AttributeSet attrs)
{
super(context, attrs);
this.context = context;
this.view = this;
}
@Override
protected void onSizeChanged(int width, int height,
int old_width, int old_height)
{
this.canvaswidth = width;
this.canvasheight = height;
super.onSizeChanged(width, height, old_width, old_height);
}
public int get_canvaswidth()
{
return this.canvaswidth;
}
public int get_canvasheight()
{
return this.canvasheight;
}
我对此很困惑:?
我还有另一个类(它不扩展“ Activity”),该类在构造函数中接收对canvasview的引用,并且也无法“解析”它:
谢谢,对不起,如果问题太明显了,我是从Java开始的,这些事情对我来说很令人困惑...
编辑:
在睡觉的时候(03:00 AM),我在想,我注意到Eclipse将这一行标记为错误,因为View对象实际上没有方法get_canvaswidth()。只有子“ CanvasView”方法具有它。因此,我的问题可以通过upcast解决:
int w = ((CanvasView) canvasview).get_canvaswidth();
我的意思是我收到了一个视图作为参数,但是由于我现在实际上是一个视图子视图,因此我应该能够使用upcast来调用“子视图”方法。现在eclipse不会产生错误,但是w和h总是报告0:-? 。我还测试了是否按照答案中的建议不使用upcast,并在调用中发送和接收CanvasView对象,并且两个方法我都得到0 :?
最佳答案
private View canvasview;
无论
canvasview
中存储了什么,您都只能调用由变量类型定义的方法。您需要更改此行。private CanvasView canvasview;
关于java - 无法从“Activity ”或类中调用自定义 View (canvasview)的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15581379/