我在使用Android GridView时遇到了奇怪的问题。我创建了一个3x4的网格,并在其中插入了按钮。我希望当用户单击按钮时,按钮的背景发生变化。这对于除了第一个按钮(索引为0 -左上角的那个)之外的所有按钮都很好。无论我做什么,OnClick事件侦听器都不会为那个按钮触发。
这是我创建视图的代码:
public View getView(int position, View convertView, ViewGroup parent) {
Button imageView;
if (convertView == null) { // if it's not recycled, initialize some attributes
Log.w("NOVO", "narejena nova celica");
imageView = new Button(mContext);
imageView.setPadding(8, 8, 8, 8);
} else {
Log.w("STARO", "stara celica");
imageView = (Button) convertView;
}
imageView.setEnabled(true);
int visina = parent.getHeight();
int sirina = parent.getWidth();
float dip = mContext.getResources().getDisplayMetrics().density;
float margin = 10*dip;
int view_height = (int)(visina - 3*margin)/4;
int view_width = (int)(sirina - 2*margin)/3;
int view_dim = 0;
if (view_height <= view_width)
view_dim = view_height;
else
view_dim = view_width;
imageView.setLayoutParams(new GridView.LayoutParams(view_dim, view_dim));
imageView.setId(position);
imageView.setOnClickListener(celice.get(position));
/*imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Toast toast = Toast.makeText(mContext, v.getId() + "bla", Toast.LENGTH_SHORT);
//toast.show();
celice.get(v.getId()).celicaVisible(4000);
}});*/
celice.get(position).id = position;
celice.get(position).setButton(imageView);
return imageView;
}
如果我换掉
imageView = (Button) convertView;
具有
imageView = new Button(mContext);
然后onClick()被触发,但背景仍然没有改变。所有其他按钮都按预期工作。
这里有一个自定义类“Celica ”,它负责实际的工作——改变背景...
public class Celica implements OnClickListener {
public boolean odkrit;
public boolean najden;
public int id;
public Drawable slikca1, slikca2;
public Celica par;
private Timer tim;
public Button but;
public Context con;
static int buttonsVisible = 0;
Celica(Drawable s1, Drawable s2) {
this.slikca1 = s1;
this.slikca2 = s2;
}
void celicaVisible(int millis) {
if (odkrit)
return;
Log.w("TEST", "prizganih " + buttonsVisible);
if (buttonsVisible >= 2)
return;
odkrit = true;
buttonsVisible++;
tim = new Timer();
tim.schedule(new timerDone(), millis);
((Activity)con).runOnUiThread(new Runnable() {
@Override
public void run() {
but.setBackground(slikca2);
}
});
}
void setButton(Button b) {
but = b;
((Activity)con).runOnUiThread(new Runnable() {
@Override
public void run() {
but.setBackground(slikca1);
}
});
}
class timerDone extends TimerTask {
@Override
public void run() {
if (!najden) {
odkrit = false;
((Activity)con).runOnUiThread(new Runnable() {
@Override
public void run() {
but.setBackground(slikca1);
}
});
}
buttonsVisible--;
tim.cancel();
}
}
@Override
public void onClick(View v) {
celicaVisible(4000);
}
}
我实际上弄清楚了。如果我使用onClick()方法提供的视图,而不是在创建Celica对象时保存实际按钮,一切都可以正常工作。
所以基本上加上:
but = (Button) v;
到 onClick() 方法解决了问题。
在Android系统中,任何视图
的 ID 都必须为非零且非负数。表示视图 ID 应为
imageView.setId(position)
当位置为零(表示第一个项目)时,按钮的ID将为零。可能是因为这个原因,第一个按钮的OnClickListener没有被触发...尝试将大于零的ID设置为按钮,然后再试一次...
你可以这样写
imageView.setId(position+1) to ensure ID > 0
我有一个按钮,我给了角半径属性。在xml代码中,应用程序似乎是弯曲的,但当我运行应用程序时,按钮是矩形的。 我也用材质按钮代替了这个按钮,但还是发生了同样的事情。它在XML设计中似乎是弯曲的,但在应用程序中却不是。
问题内容: 我有一个问题是悬停在Firefox中无法使用!它可以在Chrome,IE 9,IE 8和IE 7中运行。有人知道此问题以及如何解决此问题吗? CSS : HTML : 问题答案: 似乎悬停事件没有反馈到跨度。 尝试选择而不是
我正在使用材料组件FloatingActionButton https://material.io/develop/android/components/floading-action-button/ 在这一点上,我无法为我的晶圆厂添加elevation我尝试使用下面的代码,但它不工作 下面是我的XML。
问题内容: 我正在尝试使用Python和Selenium在LinkedIn上添加联系人。我试图通过在“网络”选项卡(https://www.linkedin.com/mynetwork)中添加LinkedIn提出的联系建议来实现此目的,该选项具有无限滚动功能。 基本上,我希望脚本找到每个建议的配置文件旁边的“连接”按钮,单击该按钮,然后重复执行直到出现错误为止,从而脚本应向下滚动以加载更多“连接”