Merhaba, android için yaptığım uygulamamı yayınladım. Buradan ulaşabilirsiniz :

https://play.google.com/store/apps/details?id=com.osman.cavus.rastgelelisteler

Yaklaşık 2 yıldır android programcılığını öğrenmek istiyordum. İlk öğrenmek istediğim zaman android studio'yu bilgisayarıma kurmuştum. İnternet üzerinde ki derslere bakıp android studio'yu kullanmayı öğrenmek istiyordum. Android studio'yu açar açmaz hata verdi. Verdiği hataya hiçbir anlam veremedim. Biraz uğraştım ama çözemedim. Şevkim kırıldı. Android studio'yu kapatım ve bir kaç ay açmadım. Bir kaç ay sonra tekrar açtım ve yine açar açmaz bir hatayla karşılaştım. Hatayı internetten biraz araştırma yaparak çözdüm ama bu seferde video izlemekten sıkılıyordum. En fazla bir kaç video izledikten sonra sıkılıp daha da uzun bir süre bakmıyordum. 2 ay öncesine kadar bu böyle gitti. Sonra ben video izleyerek öğrenemeyeceğimi farkettim. Daha doğrusu öğrenmeye odaklandığım zaman sıkılıyordum.

Java ve android'i bir şehire benzettim. Kafamda bir şehir hayal ettim. Ben bu koskoca şehrin ilçelerini, mahallelerini, sokaklarını, caddelerini nasıl avucumun içi gibi öğrenecektim? Navigasyon cihazından şehrin sokaklarını izlemekten ve böyle öğrenmeye çalışmaktan çok sıkılıyordum. Bence bir şehrin sokakları, çıkmaz sokakları en iyi o şehirde kaybolarak öğrenilir. Ben de öyle yapmaya karar verdim. Hiçbir şekilde öğrenmeye odaklanmayacaktım. Sadece seçtiğim her hangi bir uygulamayı hiçbir şey bilmeden, hiçbir plan yapmadan bitirmeye odaklanacaktım. Aynen de öyle yaptım. Google play'de gördüğüm bir uygulamanın benzerini yapmaya karar verdim. Android studio'yu ve java'yı öğrenmeye değil, seçtiğim uygulamayı bitirmeye odaklandım. Hangi yolun doğru hangisinin yanlış olduğunu bu şehirde kaybolarak öğrendim. Bu iki ay içinde bir çok yol öğrendim, bir çok çıkmaz yol gördüm.

Hiçbir plan yapmadığım için uygulamayı baştan aşağı defalarca değiştirmek zorunda kaldım. Bu sayede planlı gitmenin önemini kavramış oldum. Bir şeyi bilmek ile onu kavramak aynı şey değilmiş. Böylece yanlış yol bana doğru yolu gösterdi.

Sadece veritabanını güncelledikten sonra recyclerview'i güncelleyebilmek için 3 gün uğraştım. Gece gündüz 3 günümü verdim. Gerçekten bu sorunu çözemediğim için başım çok ağrımaya başlamıştı. Ama hayret vericidir ki eskiden olduğu gibi sıkılıp bırakmadım. notifyDataSetChanged() kodunun recyclerview'i güncellediğini öğrendim. Ama bu seferde bu kodu nereye yazacağımı bilmiyordum. Neredeyse bu kodu adapterin her yerine yazarak denedim ama işe yaramadı. Sonra adapteri tanımladığım sayfada ve güncellemeyi yaptığım yerde yazınca çalıştı. Ama sonra öğrendim ki notifyDataSetChanged() kullanılması tavsiye edilmeyen bir yöntem. Sonra bu kodu değiştirip ekleme yaptığım yerlere notifyItemInserted(position) silme yaptığım yerlere ise notifyItemRemoved(position) kodunu kullandım. Tabi bunları yaptıktan sonra liste sıralamasının değiştiğini adaptere bildirmek gerekiyordu. Ben bunu da bilmediğim için baya uğraşmıştım.

Sonraları Log'ların nasıl kullanıldığını öğrenince biraz rahatladım. Artık yazdığım kodun nasıl tepki verdiğini daha iyi görebiliyordum.

Öğrenmeye hiç odaklanmadım ama ister istemez de bir çok şey öğrendim. Bu uygulamayı geliştirirken öğrendiğim konular :
- Yıllardır bir türlü kavrayamadığım sınıf nesne yapısını öğrendim
- Static değişkenlerin ne işe yaradığını ve ne amaçla kullanıldığını tam olarak kavradım
- RecyclerView kullanımını öğrendim
- ListView kullanımını öğrendim
- Log kullanmayı
- Sqlite kullanmayı, veri ekleme, silme, güncelleme... Yani veritabanını kullanmayı
- ArrayList'leri öğrendim.
- Object List'leri oluşturmayı ve kullanmayı öğrendim.
- ConstraintLayout ve LinearLayout'u kullanmayı öğrendim. Relative layout'u öğrenmedim çünkü hiç ihtiyacım olmadı.
..... ve daha bir çok konuyu öğrendim. Bildiklerimi ise tam olarak kavradım.

Bence bir şehirde kaybolmaktan korkuyorsanız o şehri öğrenemezsiniz. Ben yabancısı olduğum bir şehri kaybolarak öğreniyorum. Bu uygulamayı geliştirirmek beni çok zorladı. Belki de çoğunuzun 1 günde yapacağı bir uygulama ama ben bu konulara yabancı olduğum için 2 ay uğraşmak zorunda kaldım.

Bu uygulamayı geliştirirken en çok faydalandığım site stackoverflow ve github oldu. Github'tan bir çok kütüphaneyi kullandım. Stackoverflow'da gerçekten bulunmaz bir nimet. Çok güzel bir site. Android studio'nun verdiği her hatanın çözümü o sitede var. Bir hatayla karşılaştığım zaman direk hata kodunu kopyalayıp google'ye yapıştırıyordum ve çözümü stackoverflow'da buluyordum. İngilizcem başlangıç düzeyinde. O yüzden google translate kullanarak yazılanlara az çok bir anlam verebiliyordum. Uygulamada yapmak istediğim bir şey olunca da ingilizce anahtar kelimeleri kullanarak arama yapıyordum ve çıkan sayfayı google translate'den çevirip anlamaya çalışıyordum. Mesela recyclerview'in nasıl güncelleştirildiğini öğrenmek için android recyclerview update şeklinde arama yaparak çözüme ulaşıyordum.

Uygulamamın adı Rastgele Listeler. Ne işe yarıyor bu uygulama diye soracak olursanız. Pek bir işe yaramıyor derim :) Oluşturduğunuz listeler içinde rastgele seçim yapılmasını sağlayan bir uygulama. Her liste elemanı için bir adet fotoğraf eklenebiliyor ve her liste elemanı için sınırsız not tutulabiliyor.

Kullandığım Kütüphaneler :
Picasso : Resimleri imageview'de görüntüleyebilmek için kullandım. Bu kütüphane iyi bir tercih mi bilmiyorum. Bu konuda bilgi sahibi olanlar bilgilendirirse sevinirim.
Color Picker : Renk seçimi yapabilmek için kullandığım kütüphane.
Circle Image View : Resimleri oval şeklinde görüntüleyebilmek için kullandığım kütüphane
Calligraphy : Yazı tiplerini yükleyebilmek için kullandığım kütüphane
Magical Camera : Uygulamamda fotoğraf seçimi ve fotoğraf çekimi yapılabilmesi için kullandığım kütüphane

Arkadaşlar daha android studio'da acemi olduğum için uygulamam bazı cihazlarda hata verebilir. Eğer bana hata hakkında ayrıntılı bilgi verirseniz en kısa sürede düzeltmeye çalışırım. Bu uygulamayı biraz daha geliştirdikten sonra bir kaç basit uygulama daha geliştireceğim. Sonra daha karmaşık projelere başlayacağım. Uygulamamı indirip değerlendirirseniz memnun kalırım. Şimdiden teşekkürler.