java - 添加一个动态按钮并在它被点击时指定一个方法
问题描述
我有一个按钮,在 XML 中它看起来像这样:
<Button
android:id="@+id/hello"
android:layout_width="match_parent"
android:tag="Greeting"
android:layout_height="60dp"
android:gravity="center_vertical"
android:onClick="onClick"
android:text="@string/hello" />
另外,我有方法public void onClick(View view) {}
。因此,每当我单击该按钮时,该方法都应该运行。嗯,这很好用。
现在,我想添加动态按钮。
if (_layout == R.layout.fragment_general) {
LinearLayout layout = view.findViewById(R.id.root);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for(String text : readFromSharedPreferences(getContext())) {
Button btn = new Button(this.getContext());
btn.setText(text);
btn.setTag(text);
btn.setTextColor(Color.BLUE);
btn.setBackgroundColor(Color.RED);
layout.addView(btn);
}
}
}
将添加按钮,但是当我单击它们时,什么也没有发生。
我也尝试过btn.performClick()
,btn.callOnClick()
但它们都不起作用。在这些方法中,我缺少一个参数。所以应该是btn.performClick("onClick")
or btn.callOnClick("onClick")
。onClick
但是,当我单击动态按钮时,我应该能够知道应该执行该方法。我怎样才能做到这一点?
解决方案
试试这个代码: -
if (_layout == R.layout.fragment_general) {
LinearLayout layout = view.findViewById(R.id.root);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for (String text : readFromSharedPreferences(getContext())) {
Button btn = new Button(this.getContext());
btn.setText(text);
btn.setTag(text);
btn.setTextColor(Color.BLUE);
btn.setBackgroundColor(Color.RED);
layout.addView(btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
}
});
}
}
}
您只需在添加到线性布局setOnClickListener
后添加即可。btn
它对我有用
推荐阅读
- expression - 使用 mapbox 表达式获取要素 id
- node.js - 如何在 EJS 模板中转换 blob 对象
- java - 为什么我们要在android中使用RequestQueue?
- php - 如何将索引数组转换为关联数组
- matlab - 如何在 Tensorflow 中编写一个简单的循环(用于矩阵元素)?
- ruby-on-rails - Rails + GraphQL - 游戏的未知属性“角色”
- c# - 创建并以只读方式打开现有文件的临时副本并在使用后删除
- python - Python,从元组中剥离字符
- angular - Angular 测试激活路由:使用 RouterTestingModule 设置查询参数
- web-scraping - R中的变量[[n]]是什么意思?