Ana içeriğe atla

20. Android’e İrtibat Seçme Örneği

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

Bu blogdaki popüler yayınlar

Basit ve Dinamik Disk Nedir? Birbirine Nasıl Dönüştürülür?

Sabit diskler Windows 2000 işletim sistemine kadar sadece temel disk (basic disk) olarak ayarlanabiliyordu. Temel disk en fazla 4 birincil bölüm (primary partition) veya 3 primary ve 1 genişleyebilir bölüm (extended partition) şeklinde yapılandırılabilir. Bir temel diskte sadece 1 tane extended partition oluşturulabilir ve sadece primary partitionlara işletim sistemi kurulabilir. Windows 2000 ile gelen dinamik disk teknolojisi, Windows 2000 den sonraki tüm Windowssürümlerinde kullanılabilmektedir. Dinamik disk kavramıyla bölüm (partition) kavramı yerinihacim (volume) kavramına bırakmıştır. Dinamik disklerde, temel disklerde olduğu gibi bir sınırlama yoktur. İstenildiği kadar volume oluşturabilir, temel disk istenirse dinamik hale getirebilir ve bu işlem esnasında herhangi bir veri kaybı yaşanmaz. Fakat dinamik diskler temel diske çevirildiğinde bir veri kaybı söz konusu olacaktır. Temel diskin bilgileri kayıt defterinde tutulur. Dinamik diskin bilgileri kendi üstünde tutulur.

Einstein'in Rölativite Kuramına Bakış

Bu yüzyılın başlarında kuramsal fizikte altın çağ başladığı zaman, adı henüz bilim dünyasında duyulmamış bir fizikçi vardı. Bu, Annalen der Physık’in 1905 tarihli sayısında fotoelektrik olayı, Brown hareketi ve özel görelilikle ilgili ünlü üç çalışmasını birden yayınlayarak üne kavuşan Albert Einstein’dır. Onun fizikteki hayat boyu çalışmaları bilimin felsefesi ve yöntemleri üzerinde büyük etki yaptı. Einstein’ın kendisi bilimci filozoftu. Bu yüzyılın başlarında kuramsal fizikte altın çağ başladığı zaman, adı henüz bilim dünyasında duyulmamış bir fizikçi vardı. Bu, Annalen der Physık’in 1905 tarihli sayısında fotoelektrik olayı, Brown hareketi ve özel görelilikle ilgili ünlü üç çalışmasını birden yayınlayarak üne kavuşan Albert Einstein’dır. Onun fizikteki hayat boyu çalışmaları bilimin felsefesi ve yöntemleri üzerinde büyük etki yaptı. Einstein’ın kendisi bilimci filozoftu. O, hayranlık uyandırıcı bir şekilde felsefeyi kullanarak bugün modern bilimin önemli bir kısmı olan buluşlarını

Rubik Küp Nasıl Çözülür?

Rubik küp 3x3x3 veya 4x4x4 gibi karesel formatta ve her kenarı farklı renkte olan bir küptür. Bu küpün; sabır küpü, sinir küpü, zekâ küpü, renk küpü, Rubikin küpü, sihirli küp (magic box), 3d Puzzle, gibi birçok değişik adı vardır. Unutulmamalıdır ki küpün çözümü için geliştirilmiş bir algoritma vardır. Bu küp ezbere çözülemez. Bu yazıda sizlere küpün en yaygın çözümü anlatılacaktır. Hata yaptığınız yerde hatayı düzeltmeye çalışmayın belirtilen algoritma çerçevesinde çözüme baştan başlayın. Hala küpü çözemediyseniz buradaki yazımızda belirtilen otomatik çözen programları deneyebilirsiniz. Öncelikle bilmeniz gerekenler: Küpün parçaları birbirinden bağımsız değildirler. Küpün orta noktası daima sabittir. Küpü ne kadar çevirirseniz çevirin değişmezler. Kırmızının karşısında daima turuncu, yeşilin karşısında mavi, sarının karşısında beyaz vardır. Bir küp, toplam 26 adet parçadan oluşmaktadır: 8 adet üç renkli köşe parçası, 12 adet iki renkli parça ve 6 adet de sabit tek ren