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

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