Android GridView에 이상한 문제가 있습니다. 3x4 격자를 만들고 그 격자에 단추를 삽입합니다. 사용자가 버튼을 클릭 할 때 버튼의 배경이 변경되기를 원합니다. 그리고 이것은 첫 번째 버튼 (인덱스 0 - 왼쪽 상단)을 제외한 모든 버튼에서 잘 작동합니다. OnClick 이벤트 리스너는 내가하는 일에 상관없이 해당 버튼에 대해 전혀 실행되지 않습니다. 내가Android GridView의 첫 번째 버튼이 작동하지 않습니다.
imageView = (Button) convertView;
여전히
imageView = new Button(mContext);
다음
온 클릭() 트리거됩니다하지만 배경을 교체 할 경우
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;
}
: 여기
내가보기를 만드는 코드입니다 변경되지 않습니다. 다른 모든 단추는 예상대로 작동합니다. 배경을 변경 ...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);
}
} 안드로이드에서
그냥'Button '대신'TextView'를 사용하십시오. –
왜 다른가요? 나는 그것을 시험해 보았다 - 변화 없음. – user3082900
@ user3082900 내 대답을 확인하십시오 ... –