2017-08-30 21 views
-1

私は単純なリストビューをやっています。私は連絡先の名前をロードしたいと思います。リストビューのアイテムをクリックすると、私は背景の色を青にしたいです。しかし、私は3つの問題があります。私のカーソルはリストビューに正しく読み込まれません。繰り返す第二の問題は、リストビュー内の項目をクリックすると、リストビューは1つ以上の項目をペイントしています.3つ目は:最後の項目をクリックするとプログラムが例外を受け取ります。リストビューに名前を正しくロードするにはどうすればいいですか?カーソルがリストビューに正しくロードされていませんか?

public class display extends AppCompatActivity { 
ListView lv ; 
    Button select; 
    String phoneNumber; 

    ArrayList <String> aa= new ArrayList<String>(); 





    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     lv = (ListView)findViewById(R.id.lv); 
     select = (Button) findViewById(R.id.button1); 
     getNumber(this.getContentResolver());} 

    public void getNumber(ContentResolver contentResolver) { 
     Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 
     while (phones.moveToNext()) 
     { 
      String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      System.out.println(".................."+phoneNumber); 
      aa.add(name); 
     } 
     phones.close();// close cursor 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_selectable_list_item,aa); 
     lv.setAdapter(adapter); 

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      parent.getChildAt(position).setBackgroundColor(Color.BLUE); 
     } 
    }); 
    } 

} 

マイレイアウトファイル:

<ListView 
     android:id="@+id/lv" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 

     android:layout_above="@+id/button1" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:text="Select" /> 

</RelativeLayout> 

答えて

0

はこの1つを試してみてください。

public class display extends AppCompatActivity { 
    ListView lv ; 
    Button your_button; // don't use java data type "select" 
    String name, phoneNumber; 

    ArrayList<String> aa; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    your_button = (Button) findViewById(R.id.button1); 
    lv = (ListView)findViewById(R.id.lv); 
    aa= new ArrayList<String>(); 
    getNumber(this.getContentResolver()); 
    } 

    public void getNumber(ContentResolver contentResolver) { 
    Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 
    if (phones.getCount() != 0) { 
     if (phones.moveToFirst()) { 
     do { 
      name= phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      aa.add(name + "\n" + phoneNumber); 
     } while (phones.moveToNext()); 
     phones.close();// close cursor 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_selectable_list_item, aa); 
     lv.setAdapter(adapter); 
     }  
    } 
    } 
} 
関連する問題