【问题标题】:How to access setOnClickListener of a button in custom view in android?如何在android的自定义视图中访问按钮的setOnClickListener?
【发布时间】: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 中使用它们。

【问题讨论】:

    标签: java android android-layout android-view


    【解决方案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); 行,所以它不起作用。
    • 接受我的回答将不胜感激 ;)
    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    相关资源
    最近更新 更多