1. ContactPicker aktivitesi içeren yeni bir
ContactPicker projesi oluşturun.
2. Tek bir ListView denetimi içermek amacıyla main.xml düzen kaynağını
değiştirin. Bu denetim irtibatları görüntülemek için kullanılacaktır.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView android:id="@+id/contactListView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
3. Tek bir TextView içeren yeni bir listitemlayout.xml düzen kaynağı
oluşturun. Bu ListView içerisindeki her bir irtibatı görüntülemek için
kullanılacaktır.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/itemTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10px"
android:textSize="16px"
android:textColor="#FFF"
/>
</LinearLayout>
4. ContactPicker aktivitesine dönün onCreate yöntemini geçersiz kılın
çağrıyı gerçekleştiren Intent’ten veri yolunu ayıklayın.
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
String dataPath =
getIntent().getData().toString();
}
5. İrtibat listesinde kayıtlı
kişiler için yeni bir URI’si oluşturun ve bir SimpleCursorArrayAdapter kullanarak bunu liste görünümüne bağlayın.
final Uri data = Uri.parse(dataPath + "people/");
final Cursor c = managedQuery(data, null, null, null, null);
String[] from = new String[] {People.NAME};
int[] to = new int[] { R.id.itemTextView };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getApplicationContext(),
R.layout.listitemlayout,
c, from, to);
ListView lv =
(ListView)findViewById(R.id.contactListView);
lv.setAdapter(adapter);
6. Liste görünümüne bir onItemClickListener ekleyin. Listeden
bir irtibat seçtiğinizde çağrıyı gerçekleştiren aktiviteye bir yol
döndürülmelidir.
lv.setOnItemClickListener(new OnItemClickListener() {
public void
onItemClick(AdapterView<?> parent, View view, int pos, long id) {
c.moveToPosition(pos);
int rowId = c.getInt(c.getColumnIndexOrThrow("_id"));
Uri outURI = Uri.parse(data.toString() +
rowId);
Intent outData = new Intent();
outData.setData(outURI);
setResult(Activity.RESULT_OK, outData);
finish();
}
});
7. Uygulama bildirimini
değiştirin ve irtibat verileri üzerinde ACTION_PICK
eylemi için destek eklemek amacıyla Aktivitenin intent-filter etiketini değiştirin.
<intent-filter>
<action android:name="android.intent.action.PICK"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:path="contacts" android:scheme="content"/>
</intent-filter>
8. Böylece alt aktivite
tamamlandı Bunu test etmek için yeni bir test bandı aktivitesi oluşturun:
ContentPickerTester. Seçilen irtibatı görüntülemek için bir TextView içeren ve
alt Aktiviteyi başlatmak için bir buton içeren contentpickertester.xml adında
yeni bir düzen kaynağı oluşturun.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/selected_contact_textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/pick_contact_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Pick Contact"
/>
</LinearLayout>
9. ContentPickerTester içerisinde onCreate yöntemini geçersiz kılın ve
düğmeye tıklama dinleyicisi ekleyerek, ACTION_PICK
ile irtibat veri tabanı URI’sinin (content://contacts/)
belirtilmesiyle örtük olarak yeni bir alt Aktivite başlatılmasını sağlayın.
public static final int PICK_CONTACT = 1;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.contentpickertester);
Button button = (Button)findViewById(R.id.pick_contact_button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View _view) {
Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/"));
startActivityForResult(intent,
PICK_CONTACT);
}
});
}
10. Alt Aktivite döndürüldüğünde
sonuçları kullanarak Metin görünümünü (Text View) seçilen irtibatın adıyla
doldurun.
@Override
public void onActivityResult(int reqCode, int
resCode, Intent data) {
super.onActivityResult(reqCode, resCode, data);
switch(reqCode) {
case (PICK_CONTACT) : {
if (resCode == Activity.RESULT_OK) {
Cursor c = managedQuery(data.getData(),
null, null, null, null);
c.moveToFirst();
String name =
c.getString(c.getColumnIndexOrThrow(People.NAME));
TextView tv =
(TextView)findViewById(R.id.selected_contact_textview);
tv.setText(name);
}
break;
}
}
}
11. Test bandınız tamamlandığında
tek yapmanız gereken uygulama bildiriminize eklemektir. Ayrıca uygulamanın
irtibatlar veri tabanına erişmesine izin vermek için bir uses-permission etiketi içerisine bir READ_CONTACTS izni eklemeniz gerekir.
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.paad.contactpicker">
<application android:icon="@drawable/icon">
<activity
android:name=".ContactPicker"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.PICK"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:path="contacts" android:scheme="content"/>
</intent-filter>
</activity>
<activity
android:name=".ContentPickerTester"
android:label="Contact Picker Test">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
</manifest>
Yorumlar
Yorum Gönder