22

Şu anda Android için ilk uygulamamı yapıyorum. Sorun yaşıyorum, SimpleCursorAdapter ile bağlantılı tarihlerin depolanması ve yerelleştirilmiş gösterimi. Üç tablo ile bir SQLitedatabase erişim kapsüll bir sınıf var. Bu sınıf, tüm tarihleri ​​ISO formatında ("yyyy-MM-dd") saklamakla ilgilenir. Tarih değerleri veritabanından okunduğunda ve ekranda görüntülendiğinde, bunların yerelleştirilmiş bir biçimde biçimlendirilmesini istiyorum. İşte yaklaştığım yaklaşım.Android'de yerelleştirilmiş biçimde tarihleri ​​görüntüleme

adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { 
    @Override 
    public boolean setViewValue(View view, Cursor cursor, 
      int columnIndex) { 
     if (view.getId() == R.id.text1) { 
      ((TextView) view).setText(getDateFormatView().format(
       parseDatabaseDate(cursor.getString(columnIndex)))); 
      return true; 
     } else if (view.getId() == R.id.text2) { 
      ((TextView)view).setText(
       cursor.getString(columnIndex)); 
      return true; 
     } else { 
      return false; 
     } 
    } 
}); 

getDateFormatView()strings.xml okunan bir desen ile bir SimpleDateFormat nesnesi oluşturur: Bu biçimlendirme yapmak için bir ViewBinder kullanır. parseDatabaseDate(), sabit bir desen yyyy-MM-dd kullanılarak oluşturulan bir SimpleDateFormat ile veritabanından tarih ayrıştırma yapar.

Bu kod düzgün çalışıyor olsa da, bunu yapmanın daha iyi bir yolu olup olmadığını merak ediyorum.

  • bir

    • iki SimpleDateFormat nesneler (SQLiteDatabase tarih dizesi ayrıştırmak amacıyla bir başka değer biçimlendirmek için kullanılır, parseDatabaseDate() kullanılır): Ne sevmiyorum ihtiyacım olduğunu Oluşturulan java.util.Date nesnesi, hemen sonra (bence) boilerplate kodu bir sürü attı.

    Bu yüzden soruyorum: tarihleri ​​yerelleştirilmiş biçimde görüntülemek için daha iyi bir yol var mı?

  • cevap

    43

    Ayrıştırmada atlamak istiyorsanız, tarihi uzun bir tarihte saklayabilirsiniz. Sonra, sıfır ayrıştırma ile uzun kullanarak yeni bir Date nesnesi oluşturabilirsiniz.

    Bu, doğrudan sorunuzla ilgili değil, ancak: Kullanmayı düşünmek isteyebileceğiniz bir şey, tarih biçimlendiricilerinizi almak için android.text.format.DateFormat. Bu şekilde, tarihlerinizi/saatlerinizi kendi ön ayarlarınız yerine kullanıcının yerel ayarlarına biçimlendirirsiniz. Artık kendi SimpleDateFormat'ınızı oluşturmanız gerekmediğinden kodunuzu da basitleştirebilir. Akılda bu iki şey ile

    , kendi yöntemlerine çağrılarda kurtulabilirsiniz: bunun için

    ((TextView) view).setText(android.text.format.DateFormat.getDateFormat().format(new Date(cursor.getString(columnIndex)))); 
    
    +0

    Daniel sayesinde. Hala Google'ın, android.text.format.DateFormat gibi yaygın Java sınıflarının yerini alan sınıflarına aşina olmak zorundayım. Depolama için uzun süreler kullanmak da iyi bir fikir. Bu, özellikle 1970'den önceki tarihleri ​​saklamak zorunda olmayan bu özel uygulama için çalışmalıdır. –

    +1

    Daniel tarafından verilen kod teorik olarak doğrudur ancak bunun yerine bazı ayarlamalar yapmalı ve bunu yapmam gerekir: ((TextView) view) .setText (android.text.format.DateFormat.getDateFormat (Class.this) .format (yeni Tarih (cursor.getLong (columnIndex)))); – okysabeni

    İlgili konular