У меня есть GridView, который я заполняю пользовательским подклассом ArrayAdapter. Этот адаптер возвращает кнопки, которые я настроил для выбора (см. Android ImageButton с выбранным состоянием? а>). Это работает до сих пор, и нажатие кнопок выбирает их (что видно с фоном селектора).
Проблема в том, что я не могу установить эти кнопки в выбранное состояние с самого начала. Они просто отображаются невыбранными, когда я впервые запускаю представление.
Я создал простой тестовый проект, чтобы проиллюстрировать проблему:
package com.example.buttonselection;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.GridView;
public class MainActivity extends Activity {
public class SelectButtonAdapter extends ArrayAdapter<String> {
public SelectButtonAdapter(Context context) {
super(context, 0);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
String name = getItem(position);
View rowView = convertView;
if (rowView == null || !(rowView instanceof Button)) {
rowView = new Button(getContext());
((Button)rowView).setOnClickListener(new OnClickListener() {
public void onClick(View button) {
if (button.isSelected()){
button.setSelected(false);
} else {
button.setSelected(true);
}
}
});
}
Button button = (Button)rowView;
button.setText(name);
button.setBackgroundResource(R.drawable.button_selection);
button.setSelected(true); // this does not work
return button;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView grid = (GridView)findViewById(R.id.gridview);
SelectButtonAdapter adapter = new SelectButtonAdapter(this);
adapter.add("One");
adapter.add("Two");
adapter.add("Three");
grid.setAdapter(adapter);
}
}
Из-за этого я даже не могу восстановить состояние кнопок, которое я сохранил с помощью onSaveInstanceState. Как я могу решить или обойти эту проблему?
Я благодарен за любую помощь!
РЕДАКТИРОВАТЬ: вот мой button_selection.xml, хотя это должно быть нормально, так как выбор кнопок позже работает нормально.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid android:color="@color/bet_button_pressed" />
<stroke
android:width="2dip"
android:color="@color/white" />
</shape>
</item>
<item android:state_selected="true">
<shape>
<solid android:color="@color/bet_button_selected" />
<stroke
android:width="2dip"
android:color="@color/white" />
</shape>
</item>
<item>
<shape>
<gradient
android:angle="90"
android:startColor="@color/bet_button_dark_green"
android:endColor="@color/bet_button_light_green"
android:centerX="0.5"
android:centerY="0.5" />
<stroke
android:width="2dip"
android:color="@color/white" />
</shape>
</item>
</selector>