For循环数组在android中的listview中不起作用

时间:2014-06-18 09:21:23

标签: android listview

我想在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);



        }

2 个答案:

答案 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);


    }