Android GridView пустой - PullRequest
       57

Android GridView пустой

0 голосов
/ 23 сентября 2011

Надеюсь, мне повезет больше, и я найду того, кто сможет мне помочь ...

Позвольте мне объяснить мою идею о том, что у меня есть список строк слева и справа от экрана, список значков, которые позволяют вам выполнять различные операции над строками слева

Речь идет об идее, которая мне нужна. Я думал о различных решениях, и я думаю, что это сетка, которая ближе к тому, что я делаю, у всех есть проблема ... Уточните список строк, вызовите GridView ... и я ничего не печатаю на экране, но экран остается полностью пустым ...

enter code public class TabelleActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.testo);

    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.main, cols);
    tabella.setAdapter(adapter); 
  }

Спасибо за терпение

1 Ответ

0 голосов
/ 22 февраля 2012

Прежде всего, вы никогда не добавляете 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.Нужна корректировка в соответствии с вашими потребностями.

...