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

Posted

技术标签:

【中文标题】如何在android的自定义视图中访问按钮的setOnClickListener?【英文标题】:How to access setOnClickListener of a button in custom view in android? 【发布时间】:2021-12-23 17:58:41 【问题描述】:

我是 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 中使用它们。

【问题讨论】:

【参考方案1】:

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

ResetButton 位于 GridView 外部,因此从 INSIDE GridView 扩展类中引用“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();
            
        );
    

【讨论】:

谢谢老哥,终于成功了,我之前确实试过这样做,但我忘记了mGridView = findViewById(R.id.gridview); 行,所以它不起作用。 接受我的回答将不胜感激 ;)

以上是关于如何在android的自定义视图中访问按钮的setOnClickListener?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除android中的自定义列表视图项?

按钮未显示在android的自定义列表视图中

如何将最新数据附加到android中的自定义基本适配器列表视图?

Android:创建自定义视图并将其动态添加到布局中

如何在单独的自定义视图中为按钮创建操作

iOS:如何从 tableview 的自定义单元格中的 UITextField 访问值