Cursor c = managedQuery(People.CONTENT_URI,null,null,null,People.NAME);
String[] cols = new String[]{People.NAME};
int[] views = new int[]{android.R.id.text1};
SimpleCursorAdapter sca = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1,c,cols,views);
listview.setAdapter(adapter);
Я использую этот фрагмент кода для подключения моего ListView
с Cursor
.
Я хочу спросить, что
String[] cols = new String[]{People.NAME};
int[] views = new int[]{android.R.id.text1};
точно делает??
и, пожалуйста, объясните аргументы, необходимые для конструктора SimpleCursorAdapter
Это карта, сообщающая адаптеру, какие столбцы от вашего курсора использовать, чтобы заполнить виджеты в вашем макете.
Они используются в указанном порядке. Данные в первом столбце, перечисленные в массиве from (вы назвали его cols), перейдут в первый идентификатор, указанный в массиве (вы назвали его просмотром) и т.д.
Другими параметрами являются макет, содержащий идентификаторы вида, которые вы указываете в массиве, и курсор, содержащий данные, которые будут использоваться в массиве.
list_item.xml См. эту ссылку
<?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="fill_parent"
android:padding="10dp"
android:textSize="16sp" >
</TextView>
HelloListView.java
public class HelloListView extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, getNames()));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
Toast.LENGTH_SHORT).show();
}
});
}
private ArrayList<String> getNames(){
ArrayList<String> namesArray = new ArrayList<String>();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME};
Cursor names = getContentResolver().query(uri, projection, null, null, null);
int indexName = names.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
names.moveToFirst();
do {
namesArray.add(names.getString(indexName));
} while (names.moveToNext());
return namesArray;
}
}