1
今天我有一個奇怪的問題。我試圖實現一個遊戲,我有一些按鈕的GridView。當任何按鈕被點擊時,它將被禁用(使用setEnabled(false)
)。問題是,只有第一個按鈕沒有被禁用。雖然日誌輸出顯示setEnabled(false)
被調用。Gridview setEnabled不適用於第一項
這裏是我的代碼:
public class ButtonAdapter extends BaseAdapter {
private LayoutInflater inflater;
private GameScreen gameScreen;
private Hangman hangman;
private static final String[] buttonValues =
{
"A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N",
"O", "P", "Q", "R", "S", "T", "U",
"", "V", "W", "X", "Y", "Z", "" ,
};
private Button[] holder = new Button[getCount()];
public ButtonAdapter(GameScreen gameScreen) {
inflater = (LayoutInflater) gameScreen
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.gameScreen = gameScreen;
}
public View getView(final int position, View convertView, ViewGroup arg2) {
View view = convertView;
if(view == null) {
view = inflater.inflate(R.layout.game_button, null);
final Button button = (Button) view.findViewById(R.id.button);
button.setText(buttonValues[position]);
holder[position] = button;
view.setTag(holder[position]);
}
else
holder[position] = (Button) view.getTag();
holder[position].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(buttonValues[position].length() != 0) {
Hangman.GameState gameState = hangman.updateCurrentWord(
buttonValues[position].charAt(0));
holder[position].setEnabled(false);
gameScreen.updateView(gameState);
Log.d("Button", position + ":" + holder[position].getText());
}
}
});
return view;
}
public int getCount() {
return buttonValues.length;
}
public Object getItem(int position) {
return buttonValues[position];
}
public long getItemId(int position) {
return position;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return holder[position].isEnabled();
}
}
我也試過((Button) view.findViewById(R.id.button)).setOnClickListener(...);
,但沒有任何變化。
請您詳細說明一下。但試試這個 - 'if(view == null){view = inflater.inflate(R.layout.game_button,null);}' 並讓按鈕單擊偵聽器被重新添加。我不明白你如何使用持有人[position] = button;因爲它是一個可以被系統回收的視圖值,所以不知道你打算如何使用它。 – 2013-04-29 18:22:44
不相關,但你的鑰匙圈應該閱讀HIJK,而不是HIGK – dberm22 2013-04-29 19:57:39
@AshwiniBhangi,我已經編輯了我的代碼,現在每次都會添加「OnClickListener」。但現在第一個項目沒有被禁用,當我點擊它。 – 2013-04-30 06:36:04