【问题标题】:Call a method in the custom view from MainActivity.Java从 MainActivity.Java 调用自定义视图中的方法
【发布时间】:2015-12-10 20:45:56
【问题描述】:

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

    <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 类中的方法?

【问题讨论】:

    标签: java android methods view graphics2d


    【解决方案1】:

    要引用您的 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;
    

    【讨论】:

    • myObject= (Object) findViewById(R.id.objectDrawnOnGUI); ||所以这可以引用设备屏幕上的任何内容吗?所以如果我有一个滑块,那么 Slider slider = (Slider) findViewById(R.id.mySlider); ?代码运行良好。
    • 啊,我明白了。游戏引擎的工作原理非常简单,通过代码引用游戏对象。很好的信息。
    【解决方案2】:

    你可以像这样实例化 Draw 类

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

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 2023-04-02
      • 1970-01-01
      • 2015-04-10
      • 2013-07-17
      相关资源
      最近更新 更多