如何显示网格视图的项目?

时间:2013-07-02 11:41:29

标签: android

我有一个网格视图,我已经定义了一个包含6个项目(字符串)的数组,这些项目必须以网格显示。

Grid_ViewActivity:

public class Grid_ViewActivity extends Activity {
    /** Called when the activity is first created. */
      //TextView selection;
      String[] characters=getResources().getStringArray(R.array.characters);

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        GridView gv=(GridView)findViewById(R.id.gridView1);
        //selection=(TextView)findViewById(R.id.selection);
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.simple_list_item,characters);
        gv.setAdapter(adapter);
        gv.setOnItemClickListener(new OnItemClickListener(){



      @Override
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            //selection.setText(characters[position]);
            Toast.makeText(getApplicationContext(),
                ((TextView) v).getText()  , Toast.LENGTH_SHORT).show();

      }
        });
}
    }

main.xml中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

<GridView
android:id="@+id/gridView1"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:numColumns="auto_fit"
android:verticalSpacing="20px"
android:horizontalSpacing="5px"
android:gravity="center"
android:columnWidth="40dp"
android:stretchMode="columnWidth"

/>
</LinearLayout>

simple_listitrm.xml:

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <TextView 
      android:id="@+id/tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:textSize="14pt"
    android:textStyle="bold"
    />
</LinearLayout>

我得到一个零点异常。当我运行这个时,应用程序被强制关闭。我哪里出错了?

4 个答案:

答案 0 :(得分:0)

试试这个,

 String[] characters=getResources().getStringArray(R.array.characters);

remove此行来自全局并放入onCreate()方法

答案 1 :(得分:0)

请尝试使用以下代码。

将simple_listitrm.xml更改为此。

将oncreate改为此。

   @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    characters = getResources().getStringArray(R.array.months);
    GridView gv = (GridView) findViewById(R.id.gridView1);
    // selection=(TextView)findViewById(R.id.selection);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            R.layout.test, characters);
    gv.setAdapter(adapter);
    gv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v,
                int position, long id) {
            // selection.setText(characters[position]);
            Toast.makeText(getApplicationContext(),
                    ((TextView) v).getText(), Toast.LENGTH_SHORT).show();

        }
    });
}

答案 2 :(得分:0)

ArrayAdapter要求资源ID为TextView XML异常,这意味着您无法提供ArrayAdapter所期望的内容。当您使用此构造函数时:

 new ArrayAdapter<String>(this, R.layout.a_layout_file, this.file)

R.Layout.a_layout_file必须是仅包含TextView的xml布局文件的id(TextView不能被其他布局包裹,如LinearLayout,RelativeLayout等!),

类似的东西:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" 
// other attributes of the TextView
/>

如果您希望列表行布局略有不同,那么简单的TextView小部件就会使用此构造函数:

    new ArrayAdapter<String>(this, R.layout.a_layout_file, 
    R.id.the_id_of_a_textview_from_the_layout, this.file)

您提供可包含各种视图的布局的ID,但也必须包含传递给ArrayAdapter的TextView with和id(第三个参数),以便它可以知道在行布局中将字符串放在何处

答案 3 :(得分:0)

你必须改变:

  @Override
  public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        //selection.setText(characters[position]);
        Toast.makeText(getApplicationContext(),
            characters[position], Toast.LENGTH_SHORT).show();

  }
    });