teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

文法の修正

2020/07/04 00:36

投稿

tege
tege

スコア29

title CHANGED
File without changes
body CHANGED
@@ -1,16 +1,6 @@
1
- 教材を見ながらandroid studioでスケジュール管理を行うアプリを作成しているのですが、現在は登録した順に表示されるだけなのです日付の降順でソートして表示させたいのですが現在のソースからどのようにすれば日付の降順で表示を行えるでしょうか?
1
+ 教材を見ながらandroid studioでスケジュール管理を行うアプリを作成しているのですが、現在は登録した順に表示されるだけなのです日付でソートして表示を行いたいのですがソートは登録時にするべきしょうか?表示時にするべきでしょうか?
2
-
3
2
  ```
4
- package com.example.myscheduler
5
3
 
6
- import android.text.format.DateFormat
7
- import android.view.LayoutInflater
8
- import android.view.View
9
- import android.view.ViewGroup
10
- import android.widget.TextView
11
- import androidx.recyclerview.widget.RecyclerView
12
- import io.realm.OrderedRealmCollection
13
- import io.realm.RealmRecyclerViewAdapter
14
4
 
15
5
  class ScheduleAdapter(data: OrderedRealmCollection<Schedule>) :
16
6
  RealmRecyclerViewAdapter<Schedule, ScheduleAdapter.ViewHolder>(data, true) {
@@ -52,4 +42,98 @@
52
42
  return getItem(position)?.id ?: 0
53
43
  }
54
44
  }
45
+ ```
46
+
47
+ ```kotlin
48
+
49
+ class ScheduleEditActivity : AppCompatActivity() {
50
+ private lateinit var realm: Realm
51
+
52
+ override fun onCreate(savedInstanceState: Bundle?) {
53
+ super.onCreate(savedInstanceState)
54
+ setContentView(R.layout.activity_schedule_edit)
55
+ realm = Realm.getDefaultInstance()
56
+
57
+ val scheduleId = intent?.getLongExtra("schedule_id", -1L) //schedule_Idを取得しscheduleIdに格納
58
+ if (scheduleId != -1L) { //取得出来ない場合-schedule_idが-1なので新規登録。それ以外は更新。
59
+ val schedule = realm.where<Schedule>()
60
+ .equalTo("id", scheduleId).findFirst()
61
+ dateEdit.setText(DateFormat.format("yyyy/MM/dd", schedule?.date))
62
+ titleEdit.setText(schedule?.title)
63
+ detailEdit.setText(schedule?.detail)
64
+ delete.visibility = View.VISIBLE
65
+ } else {
66
+ delete.visibility = View.INVISIBLE
67
+ }
68
+
69
+ ////////////////////////////////保存が押された時の処理/////////////////////////////////
70
+ save.setOnClickListener { view: View ->
71
+ when (scheduleId) {
72
+ -1L -> {
73
+ realm.executeTransaction { db: Realm ->
74
+ val maxId = db.where<Schedule>().max("id")
75
+ val nextId = (maxId?.toLong() ?: 0L) + 1
76
+ val schedule = db.createObject<Schedule>(nextId)
77
+ val date = dateEdit.text.toString().toDate("yyyy/MM/dd")
78
+ if (date != null) schedule.date = date
79
+ schedule.title = titleEdit.text.toString()
80
+ schedule.detail = detailEdit.text.toString()
81
+ }
82
+ Snackbar.make(view, "追加しました", Snackbar.LENGTH_INDEFINITE)
83
+ .setAction("戻る") { finish() }
84
+ .setActionTextColor(Color.YELLOW)
85
+ .show()
86
+ }
87
+ else -> {
88
+ realm.executeTransaction { db: Realm ->
89
+ val schedule = db.where<Schedule>()
90
+ .equalTo("id", scheduleId).findFirst()
91
+ val date = dateEdit.text.toString()
92
+ .toDate("yyyy/MM/dd")
93
+ if (date != null) schedule?.date = date
94
+ schedule?.title = titleEdit.text.toString()
95
+ schedule?.detail = detailEdit.text.toString()
96
+
97
+ }
98
+ ////////////////////////スナックバー表示処理////////////////////////////////
99
+ Snackbar.make(view, "修正しました", Snackbar.LENGTH_INDEFINITE)
100
+ .setAction("戻る") { finish() }
101
+ .setActionTextColor(Color.YELLOW)
102
+ .show()
103
+ }
104
+ }
105
+ }
106
+ /////////////削除ボタンが押された場合///////////////////////////
107
+ delete.setOnClickListener { view: View ->
108
+ realm.executeTransaction { db: Realm ->
109
+ db.where<Schedule>().equalTo("id", scheduleId)
110
+ ?.findFirst()
111
+ ?.deleteFromRealm()
112
+ }
113
+ ///////////////////////////スナックバー//////////////////////////
114
+ Snackbar.make(view, "削除しました", Snackbar.LENGTH_INDEFINITE)
115
+ .setAction("戻る") { finish() }
116
+ .setActionTextColor(Color.YELLOW)
117
+ .show()
118
+ }
119
+ }
120
+
121
+ override fun onDestroy() {
122
+ super.onDestroy()
123
+ realm.close()
124
+ }
125
+
126
+ //入力された値をDate型に変換
127
+ private fun String.toDate(pattern: String = "yyyy/MM/dd HH:mm"): Date? { //TextEditに入力された日付をData型に変換
128
+ return try {
129
+ SimpleDateFormat(pattern).parse(this)
130
+ } catch (e: IllegalArgumentException) {
131
+ return null
132
+ } catch (e: ParseException) {
133
+ return null
134
+ }
135
+ }
136
+ }
137
+
138
+ コード
55
139
  ```