从MainActivity.Java调用自定义视图中的方法

时间:2015-12-10 20:45:57

标签: java android methods view graphics2d

我创建了一个自定义视图,它已添加到布局中。

    <com.example.moynul.myapplication.Draw
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/view"
    android:layout_above="@+id/button"
    android:layout_alignRight="@+id/button2"
    android:layout_alignEnd="@+id/button2"
    android:layout_marginBottom="52dp"
    />

从这里开始,我不需要在MainActivity类中实例化我的Draw类。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

但是这有局限性,因为我无法在Draw类中调用方法。

public void buttonOnClick(View v)
{
    switch (v.getId())
    {
        case R.id.button:
            //call a method in the Draw class 
            break;
    }
}

我尝试将我的Draw(扩展视图)转换为静态类,并在公共静态方法中转换我想要访问的方法。但invalidate()不喜欢这个。

我的下一步尝试是通过GUI构建器在自定义视图类上创建一个按钮。您似乎无法使按钮成为自定义视图对象的子对象。

我的问题:如何从主类访问Draw类中的方法?

2 个答案:

答案 0 :(得分:3)

Draw

中引用您的MainActivity班级创建全局变量
Draw myDraw; 

接下来,在onCreate

中进行设置
myDraw = (Draw) findViewById(R.id.view);

最后,在buttonOnClick

中调用它
case R.id.button:
    myDraw.method();
    break;

如果您只想引用buttonOnClick中的变量,您可以执行此类操作

case R.id.button:
    ((Draw) findViewById(R.id.view)).method();
    break;

答案 1 :(得分:2)

您可以像这样实现Draw类

Draw mDraw = (Draw) findViewById(R.id.view);
mDraw.myMethod();