如何在 android 的自定义视图中访问按钮的 setOnClickListener?

How to access setOnClickListener of a button in custom view in android?

我是 Android 开发的新手,这是我的第一个 Android 应用程序。

这是我的 MainActivity 布局的样子:

这是 MainActivity 的组件树

gridView 是一个自定义视图,我在其中有一个 resetGrid 函数,看起来像这样

public class GridView extends View {

    resetGird(){
        // stuff that resets grid;
    }
}

这是我面临的问题:

我可以在MainActivity文件中访问重置按钮的setOnClickListener,但在resetGrid函数所在的GridView文件中不能。

        resetButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(PathFind.this, "reset", Toast.LENGTH_SHORT).show();
            }
        });

我还想访问 GridView 文件中重置按钮的 setOnClickListener,并在按下按钮时调用 resetGrid 函数。

不仅如此,我的计划是使用图中列出的所有控件(开始按钮、对角复选框、速度滑块)来控制 GridView。但我似乎无法找到一种方法来做到这一点。 main_activity 中提供了所有控件,但我无法在 GridView 中使用它们。

你是对的。 “技巧”是将 GridView 的实例保存在 MainActivity 变量中,然后使用它对 call/execute GridView 方法(如“resetGrid()”)的引用。

ResetButton 存在于 GridView 外部,因此从 INSIDE GridView extended class.

引用“resetButton”是一种不好的做法

伪代码:

class GridView extends View {
    public void resetGrid() {
       ...do reset stuff here...
    }
}

class MainActivity extends Activity {
    private GridView mGridView;
    private Button mResetButton;
    public onCreateView() {
        ...
        mGridView = findViewById(R.id.gridview);
        mResetButton = findViewById(R.id.resetButton);
        resetButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mGridView.resetGrid();
            }
        });
    }
}