Android 如何显示栅格视图的项目?

Android 如何显示栅格视图的项目?,android,Android,我有一个网格视图,我定义了一个由6个项目(字符串)组成的数组,这些项目必须显示在网格中 网格视图活动: public class Grid_ViewActivity extends Activity { /** Called when the activity is first created. */ //TextView selection; String[] characters=getResources().getStringArray(R.array.ch

我有一个网格视图,我定义了一个由6个项目(字符串)组成的数组,这些项目必须显示在网格中

网格视图活动:

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();

      }
        });
}
    }
public class Grid\u ViewActivity扩展了活动{
/**在首次创建活动时调用*/
//文本视图选择;
String[]characters=getResources().getStringArray(R.array.characters);
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gv=(GridView)findViewById(R.id.gridView1);
//selection=(TextView)findViewById(R.id.selection);
ArrayAdapter=新的ArrayAdapter(这个,R.layout.simple\u list\u项,字符);
gv.设置适配器(适配器);
gv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
//selection.setText(字符[位置]);
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>

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

试试这个

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

从全局中删除这一行并放入
onCreate()
方法中

请尝试使用下面的代码

将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();

        }
    });
}
@覆盖
创建时的公共void(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=新的ArrayAdapter(此,
R.布局、测试、字符);
gv.设置适配器(适配器);
gv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
//selection.setText(字符[位置]);
Toast.makeText(getApplicationContext(),
((TextView)v.getText(),Toast.LENGTH_SHORT).show();
}
});
}

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

 new ArrayAdapter<String>(this, R.layout.a_layout_file, this.file)
    new ArrayAdapter<String>(this, R.layout.a_layout_file, 
    R.id.the_id_of_a_textview_from_the_layout, this.file)
new ArrayAdapter(this,R.layout.a_layout_文件,this.file)
R.Layout.a_Layout_文件必须是仅包含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, this.file)
    new ArrayAdapter<String>(this, R.layout.a_layout_file, 
    R.id.the_id_of_a_textview_from_the_layout, this.file)
new ArrayAdapter(此,R.layout.a_layout_文件,
R.id.a\u文本视图的\u id\u来自\u布局,this.file)
其中,您提供的布局id可以包含各种视图,但还必须包含传递给ArrayAdapter的带有和id(第三个参数)的TextView,以便它知道在行布局中放置字符串的位置。

您必须更改:

  @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();

  }
    });
@覆盖
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
//selection.setText(字符[位置]);
Toast.makeText(getApplicationContext(),
字符[位置],Toast.LENGTH_SHORT.show();
}
});

请发布您的logcat@ShaniGoriwal致命异常:main java.lang.IllegalStateException:ArrayAdapter要求资源ID为TextView,位于android.widget.ArrayAdapter.createViewFromResource,位于android.widget.ArrayAdapter.getView,位于android.widget.AblistView.ActainView,位于android.widget.GridView.onMeasure,在android.view.view.measure、android.view.ViewGroup.measureChildWithMargins、android.widget.LinearLayout.measureChildBeforeLayout、android.widget.LinearLayout.measureVertical、android.widget.LinearLayout.onMeasure、android.view.view.measureChildWithMargins、android.view.ViewGroup.MeasureChildWidget、android.FrameLayout.onMeasure、,在android.view.view.measure,在android.widget.LinearLayout.measureVertical,在android.widget.LinearLayout.onMeasure,在android.view.view.measure,在android.view.ViewGroup.measureChildWithMargins,在android.widget.FrameLayout.onMeasure,在android.view.ViewRoot.performTraversals,在android.view.ViewRoot.handleMessage,在android.os.Handler.dispatchMessage、android.os.Looper.loop、android.app.ActivityThread.main、java.lang.reflect.Method.invokenactive、java.lang.reflect.Method.invoke、com.android.internal.os.zyoteinit$MethodAndArgsCaller.run、com.android.internal.os.zyoteinit.main、,在dalvik.system.NativeStart.main,由以下原因引起:java.lang.ClassCastException:android.widget.LinearLayout,在android.widget.ArrayAdapter.createViewFromResource致命异常:main java.lang.IllegalStateException:ArrayAdapter要求资源ID为文本视图,在android.widget.ArrayAdapter.createViewFromResource,在android.widget.ArrayAdapter.getView,在android.widget.AblistView.ActainView,在android.widget.GridView.onMeasure,在android.view.view.measure,在android.view.ViewGroup.MeasureChildWidget.LinearLayout.measureChildBeforeLayout,在android.widget.LinearLayout.measureVertical–,在android.widget.LinearLayout.onMeasure,在android.view.view.measure,在android.view.ViewGroup.measureChildWithMargins,在android.widget.FrameLayout.onMeasure,在android.view.view.measure,在android.widget.LinearLayout.measureVertical,在android.widget.LinearLayout.OnMeasureChildWithMargins,在android.view.ViewGroup.measureChildWithMargins,在android.widget.FrameLayout.onMeasure,在android.view.view.me