Android 如何显示栅格视图的项目?
我有一个网格视图,我定义了一个由6个项目(字符串)组成的数组,这些项目必须显示在网格中 网格视图活动: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
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