Ana içeriğe atla

21. Android’e To-Do List Uygulamasını Dizi Adaptörü İle Özelleştirmek

1.    Yeni bir ToDoItem sınıfı yaratın. Bu sayede görev ve oluşturma tarihleri kayıt edilmeye başlar. Öğe verilerinin bir özetini geri döndürmek için toString yöntemini kullanın.

package com.paad.todolist;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ToDoItem {
  public String getTask() {
    return task;
  }
  String task;
  public Date getCreated() {
    return created;   
  }
  Date created;
  public ToDoItem(String _task) {
    this(_task, new Date(java.lang.System.currentTimeMillis()));
  }
  public ToDoItem(String _task, Date _created) {
    task = _task;
    created = _created;
  }
  @Override
  public String toString() {
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy"); 
    return "(" + sdf.format(created) +  ") " + task;
  }
}

2.    ToDoItem nesnelerini saklamak için ToDoList aktivitesini açın ve ArrayList ve ArrayAdapter değişken türlerini değiştirin. Daha sonra ilgili değişkeni başlatmak ve güncellemek için onCreate yöntemini kullanmalısınız. Ayrıca ToDoItem nesnelerine destek için onKeyListener işleyicisi de güncellemeniz gerekir.

  private ArrayList<ToDoItem> todoItems;
  private ListView myListView;
  private EditText myEditText;
  private ToDoItemAdapter aa;
  private boolean addingNew = false;
  static final private int ADD_NEW_TODO = Menu.FIRST;
  static final private int REMOVE_TODO = Menu.FIRST + 1;
  @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<ToDoItem>();
    aa = new ToDoItemAdapter(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) {
            ToDoItem newItem = new ToDoItem(myEditText.getText().toString());
            todoItems.add(0, newItem);
            myEditText.setText("");
            aa.notifyDataSetChanged();
            cancelAdd();
            return true;
          }
        return false;
      }
    });
    registerForContextMenu(myListView);
  }

3.    Şimdi her bir ToDo List öğesi için özelleştirilmiş yerleşim yaratabilirsiniz.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="@color/notepad_paper">
  <TextView
    android:id="@+id/rowDate"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:scrollbars="vertical"
    android:fadingEdge="vertical"
    android:textColor="@color/notepad_text"
    android:layout_alignParentRight="true"
  />
  <TextView
    android:id="@+id/row"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:padding="10dp"
    android:scrollbars="vertical"
    android:fadingEdge="vertical"
    android:textColor="@color/notepad_text"
    android:layout_alignParentLeft="@+id/rowDate"
  />
</RelativeLayout>

4.    ToDoItem’ın belirli bir varyasyonu olan bir ArrayAdapter genişleterek yeni bir sınıf (toDoItemAdapter) oluşturun. 3. Adımda oluşturduğunuz yerleşimde görüntülenen ToDoItem nesnesinin görev ve tarih özelliklerini atamak için getView’u yok sayın.

package com.paad.todolist;
import java.text.SimpleDateFormat;
import android.content.Context;
import java.util.*;
import android.view.*;
import android.widget.*;
public class ToDoItemAdapter extends ArrayAdapter<ToDoItem> {
  int resource;
  public ToDoItemAdapter(Context _context, int _resource, List<ToDoItem> _items) {
    super(_context, _resource, _items);
    resource = _resource;
  }
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    LinearLayout todoView;
    ToDoItem item = getItem(position);
    String taskString = item.getTask();
    Date createdDate = item.getCreated();
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
    String dateString = sdf.format(createdDate);
    if (convertView == null) {
      todoView = new LinearLayout(getContext());
      String inflater = Context.LAYOUT_INFLATER_SERVICE;
      LayoutInflater vi = (LayoutInflater)getContext().getSystemService(inflater);
      vi.inflate(resource, todoView, true);
    } else {
      todoView = (LinearLayout) convertView;
    }
    TextView dateView = (TextView)todoView.findViewById(R.id.rowDate);
    TextView taskView = (TextView)todoView.findViewById(R.id.row);
    dateView.setText(dateString);
    taskView.setText(taskString);
    return todoView;
  }
}

5.    ToDoItemAdapter ile ArrayAdapter’ün deklarasyonunu yenileyin.

  private ArrayList<ToDoItem> todoItems;
  private ListView myListView;
  private EditText myEditText;
  private ToDoItemAdapter aa;
  private boolean addingNew = false;
  static final private int ADD_NEW_TODO = Menu.FIRST;
  static final private int REMOVE_TODO = Menu.FIRST + 1;
  @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<ToDoItem>();
    aa = new ToDoItemAdapter(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) {
            ToDoItem newItem = new ToDoItem(myEditText.getText().toString());
            todoItems.add(0, newItem);
            myEditText.setText("");
            aa.notifyDataSetChanged();
            cancelAdd();
            return true;
          }
        return false;
      }
    });
    registerForContextMenu(myListView);

  }

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ç...

Aynı Anda İki Şey Yapmak Beyninizi Yakıyor!

Stanford Üniversitesi’nde yapılan bir araştırmada, çoklu iş yapmanın (multitasking), her seferinde bir iş yapmaya oranla daha az verimli olduğu bulundu. Bu araştırmacılar düzenli olarak bir kaç elektronik bilgi akımına maruz kalan insanların bu bilgileri hatırlayamadığını ve bir işten diğerine, her seferinde bir iş yapan insanlar kadar iyi başarıyla geçemediğini buldular. Özel bir yetenek mi? Peki ya bazı insanların aynı anda çoklu iş yapmak konusunda özel bir yeteneği varsa? Stanford’daki araştırmacılar katılımcı gruplarını çoklu iş yapma konusundaki eğilimleri ve bunun performanslarını artırdığına olan inançları bazında karşılaştırdılar. Aynı anda çok fazla işi bir anda yapan kişilerin – çoğunlukla çoklu iş yapan ve bunun performanslarını artırdığını hisseden insanlar – performanslarının her seferinde tek bir işe odaklananlara göre daha kötü olduğunu buldular. Sıklıkla çoklu iş yapan kişiler daha kötü performans sergilediler çünkü düşüncelerini düzenlemek ve gereksiz bilgiler...

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...