0

我有一个网格视图,并且我定义了一个必须在网格中显示的 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();

      }
        });
}
    }

主.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

4 回答 4

0

尝试这个,

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

remove这条线来自全局并放在内部onCreate()方法

于 2013-07-02T11:47:49.427 回答
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();

  }
    });
于 2013-07-03T05:51:36.330 回答
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();

        }
    });
}
于 2013-07-02T12:16:03.563 回答
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,但还必须包含 TextView 和您传递给 ArrayAdapter 的 id(第三个参数),以便它可以知道将字符串放在行布局中的位置。

于 2013-07-03T05:40:13.093 回答