Android GridView为空

时间:2011-09-23 13:59:08

标签: android-layout android-widget

我希望有一点'幸运,找到能帮助我的人......

让我解释一下我的想法,我在屏幕的左侧和右侧有一个字符串列表,一个图标列表,允许您对左侧的字符串执行各种操作

这是关于我需要的想法。 我想到了各种解决方案,我认为这是一个更接近我所做的网格,所有ha问题...优化字符串列表,调用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 :(得分:0)

首先,您永远不会将GridView添加到屏幕上显示的视图中。为此,您必须调用ViewGroup.addView(View)方法。 例如,您可以为基本布局提供ID,并执行以下操作:

// 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

official documentation of ArrayAdapter

给出了解释
  

由任意对象数组支持的具体BaseAdapter。默认情况下,此类期望提供的资源ID引用单个TextView。如果要使用更复杂的布局,请使用也带有字段ID的构造函数。该字段id应引用较大布局资源中的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>

最后,我只需要在GridView的ArrayAdapter中使用它:

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。需要一些调整以满足您的需求。