Ana içeriğe atla

19. Android’e To-Do List Menü Örneği

1. ToDoList aktivite sınıfında Menü işlevi için ihtiyacınız olan paketleri içe aktararak başlayın.

import android.view.Menu;
import android.view.MenuItem;
import android.view.ContextMenu;
import android.widget.AdapterView;

2. Erişim belirteci private static final olan değişkenler ekleyerek her menü nesnesi için eşsiz ID’ler tanımlayın.

static final private int ADD_NEW_TODO = Menu.FIRST;
static final private int REMOVE_TODO = Menu.FIRST + 1;

3. 2 yeni menü nesnesi eklemek için onCreateOptionsMenu metodunu ezin Nesnelerden biri eklemek diğeri çıkarmak için olacak. Uygun yazıyı yazın ve ikon kaynağını atayarak her nesne için kısa yol tuşu belirleyin.

@Override
  public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);     
    MenuItem itemAdd = menu.add(0, ADD_NEW_TODO, Menu.NONE, R.string.add_new);
    MenuItem itemRem = menu.add(0, REMOVE_TODO, Menu.NONE, R.string.remove);
    itemAdd.setIcon(R.drawable.add_new_item);
    itemRem.setIcon(R.drawable.remove_item);
    itemAdd.setShortcut('0', 'a');
    itemRem.setShortcut('1', 'r');
    return true;
  }

4. Aktivite menüsünü oluşturduktan sonra bağlam menüsünü oluşturun. List View’u bağlam menüsünde kullanabilmek için onCreate’i değiştirin. Daha sonra remove nesnesiyle oluşturmak için onCreateContextMenu metodunu ezin.

@Override
  public void onCreate(Bundle icicle) {
    registerForContextMenu(myListView);
  }
  @Override
   public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {    
     super.onCreateContextMenu(menu, v, menuInfo);
    menu.setHeaderTitle("Selected To Do Item");
     menu.add(0, REMOVE_TODO, Menu.NONE, R.string.remove);           
   }

5. Uygulama bağlamına göre menünün görünümünü değiştirin OnPrepareOptionsMenu metodunu ezin.

private boolean addingNew = false;
  @Override
  public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    int idx = myListView.getSelectedItemPosition();
    String removeTitle = getString(addingNew ? R.string.cancel : R.string.remove);
    MenuItem removeItem = menu.findItem(REMOVE_TODO);
    removeItem.setTitle(removeTitle);
    removeItem.setVisible(addingNew || idx > -1);
    return true;   
  }

6. 5. Adımdaki kodun çalışması için ListView kontrolünün kapsamını arttırmalısınız. Aynı şeyi ArrayAdapter ve EditText için de yaparak add ve remove işlevlerini desteklemelerini sağlayın.

private ArrayList<String> todoItems;
  private ListView myListView;
  private EditText myEditText;
  private ArrayAdapter<String> aa;
  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);
    myListView = (ListView)findViewById(R.id.myListView);
    myEditText = (EditText)findViewById(R.id.myEditText);
    todoItems = new ArrayList<String>();
    aa = new ArrayAdapter<String>(getApplicationContext(), R.layout.todolist_item, todoItems);
    myListView.setAdapter(aa);
    myEditText.setOnKeyListener(new OnKeyListener() {
      public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN)
          if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
            todoItems.add(0, myEditText.getText().toString());
            myEditText.setText("");
            aa.notifyDataSetChanged();
            cancelAdd();
            return true;
          }
        return false;
      }
    });
    registerForContextMenu(myListView);
  }

7. OnOptionItemSelected metodunu ezerek başlayın. “remove” menü nesnesi için getSelectedItemPosition metodounu kullanarak seçili nesneyi bulabilirsiniz.

@Override
  public boolean onOptionsItemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);
    int index = myListView.getSelectedItemPosition();
    switch (item.getItemId()) {
      case (REMOVE_TODO): {
        if (addingNew) {
          cancelAdd();
        }
        else {
          removeItem(index);
        }
        return true;
      }
      case (ADD_NEW_TODO): {
        addNewItem();
        return true;
      }
    }
    return false;
  }

8. Bağlam menüsü nesnelerinin seçimini yönetmek için onContextItemSelected metodunu ezin. ContextMenuInfo’nun AdapterView-spesifik uygulamasını kullanıyorsunuz. Bu bağlam menüsünün tetiklendiği view’a ve görüntülediği verinin indeksine referans ekler. Onu kaldırılacak nesnenin indeksi olarak kullanın.

@Override
  public boolean onContextItemSelected(MenuItem item) { 
    super.onContextItemSelected(item);
    switch (item.getItemId()) {
      case (REMOVE_TODO): {
        AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();                
        int index = menuInfo.position;
        removeItem(index);
        return true;
      }
    }
    return false;
  }

9. Menü nesnesi seçim işleyicilerini çağırmak için kökler yaratın. Yeni işlevler için her kökü uygulayın.

private void cancelAdd() {
     addingNew = false;
     myEditText.setVisibility(View.GONE);
  }
  private void addNewItem() {
     addingNew = true;   
     myEditText.setVisibility(View.VISIBLE);
     myEditText.requestFocus();
  }
  private void removeItem(int _index) {
    todoItems.remove(_index);
    aa.notifyDataSetChanged(); 
  }

10. Listeye yeni bir nesne ekledikten sonra yazı giriş kutusunu saklamanız gerekir. OnCreate metodu içinde onKeyListener’ın cancelAdd fonksiyonunu çağıracağı şekilde modifiye edin.

myEditText.setOnKeyListener(new OnKeyListener() {
      public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN)
          if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
            todoItems.add(0, myEditText.getText().toString());
            myEditText.setText("");
            aa.notifyDataSetChanged();
            cancelAdd();
            return true;
          }
        return false;
      }
    });

11. Kullanıcı arayüzü tutarlılığını sağlamak için main.xml kaynağını kullanıcı yeni bir nesne eklemeyi seçene kadar yazı girdi kutusunu saklayacak şekilde düzenleyin.

<EditText
    android:id="@+id/myEditText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text=""
    android:visibility="gone"
  />

Yorumlar

Bu blogdaki popüler yayınlar

Project: AutoPlan

PROJENİN AMACI : Bilgisayar ortamında mimari projeden otomatik olarak elektrik tesisat projesini çizdirmek. PROJENİN HEDEFLERİ : Bilgisayar ortamında mimari projeden elektrik tesisat projesini çizdirip, zamandan tasarruf sağlamak. Mimari bir proje çizilerek, üzerine elektrik tesisatını otomatik çizen program. PROJENİN SÜRESİ : 4 Ay PROJENİN SONUÇLARI : Elektrik tesisat projeleri üzerine çalışan insanların işlerini kolaylaştırmak, çizimde insan hatalarından kaynaklanan yanlışlıkların önüne geçmek. KAYNAKÇA : Elektrik-Elektronik Tek. alanı aydınlatma projeleri modülü. Şimdi Microsoft Visual C++ Öğrenin (Chuck Sphar) kitabı. Download :  Autoplan Setup PROJENİN ÇALIŞMASI HAKKINDA GENEL BİLGİLER Bu projede kat planı çizilen binanın, elektrik tesisat planını otomatik olarak çizebilecek bir yazılım geliştirmeye çalıştım. Böyle bir program kullanıcılara rahatlık sağlar ve önemli oranda zaman kazandırabilir. Bu programın çalışabilmesi kat planından çıkarabileceği ipuç...

Larry Page ve Sergey Brin Google Girişimciliği

Garajda kurulan Google, bugün internet denilince akla ilk gelen web sitesidir. Akıllı telefon denilince akla ilk gelen Android işletim sistemidir. Şirketin kurucuları Larry Page ve Sergey Brin tanıdık bir arkadaşları vasıtasıyla ilk tanıştıklarında anlaşamazlardı. Birçok konuda fikir birliği kuramazlardı. İkili Stanford Üniversitesinde doktora yapıyorlardı. Google’dan önce Larry Page Stanford’ın tüm ağını bilgisayara indirebiliriz iddiasını ortaya atmasıyla ilk projelerine giriştiler. Verdikleri süre dolup üzerine aylar geçmiş olsa da ikili ağın yarısını bile indirememişlerdi. Bu indirme yöntemi aslında Google arama motorunun temellerini oluşturuyordu. İkili 1996 yılında ellerindeki bilgileri daha faydalı bir iş için kullanmaya karar vererek BackRub adında bir arama motoru kurmaya karar verdiler. BackRub’ı Sergey’in yurt odasında kurmaya başlarken, bir yandan da kendilerinin geliştirdiği arama teknolojisini bilgisayar bölümünden arkadaşlarına anlattılar. Arkadaşları bu fikri çok beğenm...

Hatırlamayı Kolaylaştıran Akıllı Manevralar

Hafıza bilgileri kaydetme (kodlama), saklama, hatırlama ve tanıma sürecidir. Hatırlarken beş duyumuzu (görme, işitme, dokunma, hissetme, koklama ve tat alma duyularını) tam kapasiteyle kullanırız. Görmek ile gözlemlemek, duymak ile işitmek, anlamak ve yapmak arasında büyük bir fark vardır. Bu fark, hatırlama yeteneğimizin derecesini belirler. Hatırlamak öğrenmek değildir. Ancak öğrenmek büyük ölçüde hatırlamayı gerektirir. Hatırlama bir süreçtir, öğrenme ise girişilen bir deneyimden elde edilebilecek bir sonuçtur. Hafıza kapasitesi artırılıp geliştirildiğinde öğrenme kapasitesi de büyük ölçüde gelişir. 1) Netleştirme ve tanım: Hafızayı geliştirmenin en iyi yollarından biri, geleceğe yönelik planlar, hayaller ve düşünceler gibi içsel görüntülerin detaylı ve net tanımlarını yapmaktır. Böylece detaylı görsel imajlar yaratılır ve tanımlama becerisine yönelik alıştırma yapılır. 2) İlişkilendirme (bağlantı kurma): Yeni bilgileri daha sonra hatırlamak için her bilgiyi hafızada bulun...