gpt4 book ai didi

java - 无法从 Activity 或类调用自定义 View (canvasview) 的方法

转载 作者:行者123 更新时间:2023-11-29 07:59:08 25 4
gpt4 key购买 nike

我无法从设置布局(包括 View )的 Activity 调用自定义 View (“canvasview”)的方法。我什至无法从 Activity 中调用 canvasview 的“ setter/getter ”。

此外,我将 View 传递给自定义类(不扩展 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:00AM),考虑一下,我注意到 Eclipse 将该行标记为错误,因为 View 对象实际上并没有 get_canvaswidth() 方法。只有子“CanvasView”方法有它。因此,我的问题可以通过 upcast 解决:

int w = ((CanvasView) canvasview).get_canvaswidth();

我的意思是我收到一个 View 作为参数,但因为我现在它真的是一个 View 子项,所以我应该能够使用向上转换来调用“子项”的方法。现在 eclipse 不会生成错误但是 w 和 h 总是报告 0 :-? .我还测试了不使用答案中建议的向上转换,并在调用中发送和接收 CanvasView 对象,我也得到 0 :?

最佳答案

private View canvasview;

无论canvasview 中存储了什么,您都只能调用变量类型定义的方法。您需要更改此行。

private CanvasView canvasview;

关于java - 无法从 Activity 或类调用自定义 View (canvasview) 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15581379/

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