Прежде всего, вы никогда не добавляете GridView к представлению, отображаемому на экране.Для этого необходимо вызвать метод ViewGroup.addView (View) .Например, вы можете присвоить свой базовый макет идентификатору и сделать что-то вроде:
// get the base Layout
LinearLayout mainLayout = (LinearLayout) findViewById(R.id.main_layout);
// add the GridView to it
mainLayout.addView(tabella);
Тем не менее, после тестирования я достиг исключения IllegalStateException, например:
02-22 09:15:13.140: E/AndroidRuntime(1634): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
Объяснение дано официальной документацией ArrayAdapter :
Конкретный BaseAdapter, который поддерживается массивом произвольных объектов.По умолчанию этот класс ожидает, что предоставленный идентификатор ресурса ссылается на один TextView.Если вы хотите использовать более сложный макет, используйте конструкторы, которые также принимают идентификатор поля.Этот идентификатор поля должен ссылаться на TextView в более крупном ресурсе макета.
Итак, мне нужен новый файл ресурсов для определения элемента (item.xml).Это как:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp" >
<TextView
android:id="@+id/item_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Наконец, мне просто нужно использовать его в ArrayAdapter для GridView:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout mainLayout = (LinearLayout) findViewById(R.id.main_layout);
GridView tabella = new GridView(this);
tabella.setNumColumns(2);
String cols[] = getResources().getStringArray(R.array.countries_array);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.item_title, cols);
tabella.setAdapter(adapter);
mainLayout.addView(tabella);
}
Я получил ожидаемое поведение, отображая GridView.Нужна корректировка в соответствии с вашими потребностями.