我想在listview中显示数组项,但是当我使用简单数组时,它可以正常工作,当我使用循环创建数组时,它不起作用。这是我的代码
public class MainActivity extends Activity {
String nm;
int number=0;
int ttl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv=(TextView) findViewById(R.id.textView1);
ListView listView = (ListView) findViewById(R.id.list);
//String[] values =new String[]{"val1","val2"};
ContentResolver cr=getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
ttl=cur.getCount()+1;
String[] myString = new String[ttl];
List<String> values = new ArrayList<String>();
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
//Query phone here. Covered next
nm=nm + name;
number++;
// myString[number] = "image" + number;
values.add(myString[number]);
}
}
}
String[] myString1 = new String[12];
for (int number1 = 0; number1 <= 11; number1++) {
myString1[number1] = "image1" + number1;
}
ArrayAdapter<String> adapter=new ArrayAdapter<String> (this,android.R.layout.simple_list_item_1,android.R.id.text1,values) ;
listView.setAdapter(adapter);
}
答案 0 :(得分:1)
替换此
values.add(myString[number]);
通过
values.add(nm);
您正在向ArrayList添加myString[number]
。由于myString
不包含任何元素,因此它只是一个大小为ttl
的空数组。如果您尚未初始化为String[] myString = new String[ttl]
,那么在values.add(myString[number])
,您将获得ArrayIndexOutOfBounds
例外。而且您不需要使用nm=nm + name
,这是不必要的。
假设您要将名称添加到列表中。如果您要将"image" + number;
添加到列表中,则只需取消注释该行。
答案 1 :(得分:0)
用此替换您的代码。
使用数组列表而不是字符串数组。它提供了添加String的add方法。
ArrayList<String> ar=new ArrayList<String>();
for (int number1 = 0; number1 <= 11; number1++) {
ar.add("image1" + number1);
}