我有一个网格视图,我已经定义了一个包含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>
我得到一个零点异常。当我运行这个时,应用程序被强制关闭。我哪里出错了?
答案 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();
}
});