如何在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?的主要内容,如果未能解决你的问题,请参考以下文章