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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Android Studio

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

Kotlin

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

Q&A

解決済

1回答

5090閲覧

ListViewから編集画面に遷移し、更新させたい

asdfhorse

総合スコア17

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2018/12/12 04:33

編集2018/12/13 01:55

家計簿アプリで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>

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

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

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

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

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

kakajika

2018/12/12 11:20

setOnItemClickListenerでは何か問題があるということでしょうか?
asdfhorse

2018/12/13 01:59

いえ、タップしたListViewのデータの取得方法がよくわかりません。
guest

回答1

0

ベストアンサー

クリックされた位置のデータを取得したいということでしたら、 RealmBaseAdapter のgetItemメソッドが使えると思います。

kotlin

1listView.setOnItemClickListener { parent, view, position, id -> 2 val adapter = listView.adapter 3 if (adapter is KakeiboAdapter) { 4 val kakeibo = adapter.getItem(position) 5 6 // 編集画面へ... 7 } 8}

投稿2018/12/13 11:27

kakajika

総合スコア3131

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

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

asdfhorse

2018/12/14 01:53

取得する際に登録されているデータを日付、金額などを分けて取得することは可能なのでしょうか?
kakajika

2018/12/14 02:11

分けて取得するとはどういうことでしょう? Kakeiboに含まれているデータでは不足しているということですか?
asdfhorse

2018/12/14 02:56

val kakeiboに入る値はタップされたlistViewの中に入っているすべてのデータ(日付、収支、金額、ジャンル)がまとまめて入れられるということでしょうか? もしそうなのでしたら、項目別に変数に分けて取得してきた方が編集画面に使用できると考えたのですが
kakajika

2018/12/14 03:00 編集

うーん、何に困っているのかよくわからないのですが、kakeiboはKakeiboクラスのインスタンスなので例えば金額が欲しいのでしたら kakeibo.money とすれば取得できると思いますよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問