家計簿アプリでListViewを使って一覧表示させています。ListViewの中にある編集したいデータ(青丸のデータ)をタップした時に、Realmに保存されているデータを編集画面(Fragment)で更新できるような機能を実装したいと考えています。タップされたデータにフォーカスを合わせたいと考えています。ListViewのデータをタップした時の処理を書く場所と書き方がわからず困っています。どなたかご教授お願いします。
kotlin
1 2open class Kakeibo : RealmObject() { 3 @PrimaryKey 4 var shushiId: Long = 0 5 var date: String? = null 6 var money: Int = 0 7 var shushi: String? = null 8 var genre: String? = null 9}
kotlin
1 2class kakeiboActivity : FragmentActivity(), DatePick.Callback { 3 private lateinit var realm: Realm 4 5 private fun initRealm() { 6 val realmConfiguration = RealmConfiguration.Builder() 7 .deleteRealmIfMigrationNeeded() 8 .schemaVersion(0) 9 .build() 10 realm = Realm.getInstance(realmConfiguration) 11 12 } 13 14 override fun onCreate(savedInstanceState: Bundle?) { 15 16 super.onCreate(savedInstanceState) 17 setContentView(R.layout.activity_kakeibo) 18 19 val config = RealmConfiguration.Builder().deleteRealmIfMigrationNeeded().build() 20 val test_navi = findViewById<Button>(R.id.insert_button) 21 22 23 Realm.setDefaultConfiguration(config) 24 25 realm = Realm.getDefaultInstance() 26 27 28 var listView: ListView 29 30 31 insert_button.setOnClickListener { 32 val intent = Intent(application, Kakeibo_AddActivity::class.java) 33 startActivity(intent) 34 } 35 val kakeibo_navi: BottomNavigationItemView = findViewById(R.id.navigation_kakeibo) 36 val resito_navi: BottomNavigationItemView = findViewById(R.id.navigation_resito) 37 val buylist_navi: BottomNavigationItemView = findViewById(R.id.navigation_buylist) 38 val recipe_navi: BottomNavigationItemView = findViewById(R.id.navigation_analysis) 39 kakeibo_navi.setOnClickListener { 40 val intent = Intent(this, kakeiboActivity::class.java) 41 startActivity(intent) 42 } 43 buylist_navi.setOnClickListener { 44 val intent = Intent(this, buylistActivity::class.java) 45 startActivity(intent) 46 } 47 resito_navi.setOnClickListener { 48 val intent = Intent(this, resitoActivity::class.java) 49 50 startActivity(intent) 51 } 52 recipe_navi.setOnClickListener { 53 val intent = Intent(this, MainActivity::class.java) 54 startActivity(intent) 55 } 56 57 listView = findViewById(R.id.kakeibolist) 58 59 val Kakeibo = realm.where<Kakeibo>().findAll() 60 listView?.adapter = KakeiboAdapter(Kakeibo) 61 62 listView.setOnItemClickListener { parent, view, position, id -> } 63 64 } 65 66 override fun onDestroy() { 67 super.onDestroy() 68 realm.close() 69 } 70 override fun onDatePicked(year: Int,monthOfYear: Int, dayOfMonth: Int) { 71 val str = String.format(Locale.US, "%d/%d", year, monthOfYear+1) 72 calendar.text = str 73 var kakeiboOfMonth = realm.where<Kakeibo>() 74 .beginsWith("date", "${year}/${monthOfYear+1}") 75 .findAll() 76 kakeiboOfMonth = kakeiboOfMonth.sort("date") 77 kakeibolist.adapter = KakeiboAdapter(kakeiboOfMonth) 78 } 79 override fun onAttachFragment(fragment : Fragment) { 80 if(fragment is DatePick) { 81 fragment.callback = this 82 } 83 } 84 fun showDatePickerDialog(view: View) { 85 val newFragment = DatePick() 86 newFragment.show(supportFragmentManager, "datePicker") 87 } 88 89}
kotlin
1 2open class KakeiboAdapter (data: OrderedRealmCollection<Kakeibo>?) : RealmBaseAdapter<Kakeibo>(data) { 3 private lateinit var mRealm: Realm 4 5 inner class ViewHolder(cell: View) { 6 var kakeiboDate = cell.findViewById<TextView>(R.id.item_date) 7 var kakeiboMoney = cell.findViewById<TextView>(R.id.item_money) 8 var kakeiboShushi = cell.findViewById<TextView>(R.id.item_shushi) 9 var kakeiboGenre = cell.findViewById<TextView>(R.id.item_genre) 10 var deleteicon: ImageView = cell.findViewById(R.id.delete_button) 11 } 12 13 override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { 14 val view: View 15 var viewHolder: ViewHolder? = null 16 mRealm = Realm.getDefaultInstance() 17 18 19 when (convertView) { 20 null -> { 21 val inflater = LayoutInflater.from(parent?.context) 22 view = inflater.inflate(R.layout.kakeibolist, parent, false) 23 viewHolder = ViewHolder(view) 24 view.tag = viewHolder 25 } 26 else -> { 27 view = convertView 28 viewHolder = view.tag as ViewHolder 29 } 30 } 31 32 adapterData?.run { 33 34 val Kakeibo = get(position) 35 viewHolder.kakeiboDate.text = Kakeibo.date.toString() 36 viewHolder.kakeiboMoney.text = Kakeibo.money.toString() 37 viewHolder.kakeiboShushi.text = Kakeibo.shushi 38 viewHolder.kakeiboGenre.text = Kakeibo.genre 39 40 viewHolder.kakeiboDate.setPadding(50, 50, 0, 0) 41 viewHolder.kakeiboMoney.setPadding(500, 100, 0, 0) 42 viewHolder.kakeiboShushi.setPadding(500, 20, 0, 0) 43 viewHolder.kakeiboGenre.setPadding(720, 50, 0, 0) 44 45 val listItem = getItem(position) 46 viewHolder.kakeiboDate.text = listItem!!.date.toString() 47 viewHolder.kakeiboShushi.text = listItem.shushi 48 viewHolder.kakeiboMoney.text = listItem.money.toString() 49 viewHolder.kakeiboGenre.text = listItem.genre 50 51 viewHolder.deleteicon.setOnClickListener { 52 var key = mRealm.where(Kakeibo::class.java) 53 .equalTo("shushiId", listItem?.shushiId).findAll() 54 mRealm.executeTransaction { 55 key.deleteAllFromRealm() 56 notifyDataSetChanged() 57 } 58 } 59 return view!! 60 } 61 } 62}
xml
1<?xml version="1.0" encoding="utf-8"?> 2<android.support.constraint.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:id="@+id/container" 7 android:layout_width="match_parent" 8 android:layout_height="match_parent" 9 tools:context=".MainActivity"> 10 11 <TextView 12 android:id="@+id/calendar" 13 android:layout_width="wrap_content" 14 android:layout_height="wrap_content" 15 android:layout_marginLeft="16dp" 16 android:text="@string/title_nengetu" 17 android:textSize="25dp" 18 android:onClick="showDatePickerDialog" 19 app:layout_constraintLeft_toLeftOf="parent" 20 app:layout_constraintTop_toTopOf="parent" 21 android:layout_marginTop="12dp" 22 /> 23 24 <View 25 android:layout_width="match_parent" 26 android:layout_height="2.5dp" 27 android:background="@color/blackColor" 28 android:layout_marginLeft="10dp" 29 android:layout_marginRight="10dp" 30 app:layout_constraintRight_toRightOf="parent" 31 app:layout_constraintLeft_toLeftOf="parent" 32 app:layout_constraintBottom_toBottomOf="parent" 33 app:layout_constraintTop_toTopOf="parent" 34 app:layout_constraintHorizontal_bias="1.0" 35 app:layout_constraintVertical_bias="0.092"/> 36 37 <android.support.design.widget.BottomNavigationView 38 android:id="@+id/navigation" 39 android:layout_width="0dp" 40 android:layout_height="wrap_content" 41 android:layout_marginEnd="0dp" 42 android:layout_marginStart="0dp" 43 android:background="?android:attr/windowBackground" 44 app:layout_constraintBottom_toBottomOf="parent" 45 app:layout_constraintLeft_toLeftOf="parent" 46 app:layout_constraintRight_toRightOf="parent" 47 app:menu="@menu/navigation"/> 48 <ListView 49 android:id="@+id/kakeibolist" 50 android:layout_width="382dp" 51 android:layout_height="464dp" 52 app:layout_constraintLeft_toLeftOf="parent" 53 app:layout_constraintRight_toRightOf="parent" 54 app:layout_constraintTop_toTopOf="parent" 55 app:layout_constraintBottom_toBottomOf="parent" 56 app:layout_constraintHorizontal_bias="0.0" 57 app:layout_constraintVertical_bias="0.489"/> 58 <Button 59 android:id="@+id/insert_button" 60 android:layout_width="wrap_content" 61 android:layout_height="wrap_content" 62 android:text="@string/insert_gamen" 63 android:layout_marginBottom="300dp" 64 android:layout_marginLeft="260dp" 65 app:layout_constraintLeft_toLeftOf="parent" 66 app:layout_constraintRight_toRightOf="parent" 67 app:layout_constraintTop_toTopOf="parent" 68 app:layout_constraintBottom_toBottomOf="parent" 69 app:layout_constraintHorizontal_bias="0.0" app:layout_constraintVertical_bias="0.0"/> 70 71</android.support.constraint.ConstraintLayout>
回答1件
あなたの回答
tips
プレビュー