質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

1056閲覧

日付でソートし降順で表示をさせたい

tege

総合スコア29

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/07/03 14:38

編集2020/07/04 00:36

教材を見ながらandroid studioでスケジュール管理を行うアプリを作成しているのですが、現在は登録した順に表示されるだけなのです。日付でソートをして表示を行いたいのですがソートは登録時にするべきでしょうか?表示する時にするべきでしょうか?

class ScheduleAdapter(data: OrderedRealmCollection<Schedule>) : RealmRecyclerViewAdapter<Schedule, ScheduleAdapter.ViewHolder>(data, true) { private var listener: ((Long?) -> Unit)? = null fun setOnItemClickListener(listener: (Long?) -> Unit) { this.listener = listener } init { setHasStableIds(true) } class ViewHolder(cell: View) : RecyclerView.ViewHolder(cell) { //RecylerViewを継承 val date: TextView = cell.findViewById(android.R.id.text1) val title: TextView = cell.findViewById(android.R.id.text2) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ScheduleAdapter.ViewHolder { val infrater = LayoutInflater.from(parent.context) //インスタンス生成 val view = infrater.inflate( //ビューにレイアウトXMLを適用 android.R.layout.simple_list_item_2, parent, false ) return ViewHolder(view) } ////////////////////////// //データを取り出し表示させるための処理///////////// override fun onBindViewHolder(holder: ScheduleAdapter.ViewHolder, position: Int) { val schedule: Schedule? = getItem(position) holder.date.text = DateFormat.format("yyyy/MM/dd", schedule?.date) holder.title.text = schedule?.title holder.itemView.setOnClickListener { listener?.invoke(schedule?.id) } } override fun getItemId(position: Int): Long { //getItemIdをオーバーライド return getItem(position)?.id ?: 0 } }

kotlin

1 2class ScheduleEditActivity : AppCompatActivity() { 3 private lateinit var realm: Realm 4 5 override fun onCreate(savedInstanceState: Bundle?) { 6 super.onCreate(savedInstanceState) 7 setContentView(R.layout.activity_schedule_edit) 8 realm = Realm.getDefaultInstance() 9 10 val scheduleId = intent?.getLongExtra("schedule_id", -1L) //schedule_Idを取得しscheduleIdに格納 11 if (scheduleId != -1L) { //取得出来ない場合-schedule_idが-1なので新規登録。それ以外は更新。 12 val schedule = realm.where<Schedule>() 13 .equalTo("id", scheduleId).findFirst() 14 dateEdit.setText(DateFormat.format("yyyy/MM/dd", schedule?.date)) 15 titleEdit.setText(schedule?.title) 16 detailEdit.setText(schedule?.detail) 17 delete.visibility = View.VISIBLE 18 } else { 19 delete.visibility = View.INVISIBLE 20 } 21 22 ////////////////////////////////保存が押された時の処理///////////////////////////////// 23 save.setOnClickListener { view: View -> 24 when (scheduleId) { 25 -1L -> { 26 realm.executeTransaction { db: Realm -> 27 val maxId = db.where<Schedule>().max("id") 28 val nextId = (maxId?.toLong() ?: 0L) + 1 29 val schedule = db.createObject<Schedule>(nextId) 30 val date = dateEdit.text.toString().toDate("yyyy/MM/dd") 31 if (date != null) schedule.date = date 32 schedule.title = titleEdit.text.toString() 33 schedule.detail = detailEdit.text.toString() 34 } 35 Snackbar.make(view, "追加しました", Snackbar.LENGTH_INDEFINITE) 36 .setAction("戻る") { finish() } 37 .setActionTextColor(Color.YELLOW) 38 .show() 39 } 40 else -> { 41 realm.executeTransaction { db: Realm -> 42 val schedule = db.where<Schedule>() 43 .equalTo("id", scheduleId).findFirst() 44 val date = dateEdit.text.toString() 45 .toDate("yyyy/MM/dd") 46 if (date != null) schedule?.date = date 47 schedule?.title = titleEdit.text.toString() 48 schedule?.detail = detailEdit.text.toString() 49 50 } 51 ////////////////////////スナックバー表示処理//////////////////////////////// 52 Snackbar.make(view, "修正しました", Snackbar.LENGTH_INDEFINITE) 53 .setAction("戻る") { finish() } 54 .setActionTextColor(Color.YELLOW) 55 .show() 56 } 57 } 58 } 59 /////////////削除ボタンが押された場合/////////////////////////// 60 delete.setOnClickListener { view: View -> 61 realm.executeTransaction { db: Realm -> 62 db.where<Schedule>().equalTo("id", scheduleId) 63 ?.findFirst() 64 ?.deleteFromRealm() 65 } 66 ///////////////////////////スナックバー////////////////////////// 67 Snackbar.make(view, "削除しました", Snackbar.LENGTH_INDEFINITE) 68 .setAction("戻る") { finish() } 69 .setActionTextColor(Color.YELLOW) 70 .show() 71 } 72 } 73 74 override fun onDestroy() { 75 super.onDestroy() 76 realm.close() 77 } 78 79 //入力された値をDate型に変換 80 private fun String.toDate(pattern: String = "yyyy/MM/dd HH:mm"): Date? { //TextEditに入力された日付をData型に変換 81 return try { 82 SimpleDateFormat(pattern).parse(this) 83 } catch (e: IllegalArgumentException) { 84 return null 85 } catch (e: ParseException) { 86 return null 87 } 88 } 89} 90 91コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/07/04 22:16

Realm よく分かりませんが、データの一覧をソートして取得するメソッドがあるのでは。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問