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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Kotlin

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

Q&A

解決済

1回答

2315閲覧

Kotlin クリックされたGridViewアイテム名を表示する

msmsmsmsmsms

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2021/08/08 12:25

編集2021/08/08 22:19

android,Kotlin初心者です。
GridViewとして表示した画像を一覧表示し、その画像をタップした際に、textViewTopに選択した画像の名前を表示したいです。
数時間調べて分からなかったため投稿させていただきました。
どなたかご回答いただけましたら幸いです。
宜しくお願いします。

kotlin mainactivity.kt

1package com.example.gridview0808a 2 3import androidx.appcompat.app.AppCompatActivity 4import java.util.ArrayList; 5import android.content.Context 6import android.os.Bundle 7import android.view.LayoutInflater 8import android.view.View 9import android.view.ViewGroup 10import android.widget.BaseAdapter 11import android.widget.Toast 12import kotlinx.android.synthetic.main.activity_main.* 13import kotlinx.android.synthetic.main.food_entry.view.* 14import com.example.gridview0808a.databinding.ActivityMainBinding 15 16class MainActivity : AppCompatActivity() { 17 var adapter: FoodAdapter? = null //FoodAdapterクラスのインスタンスを作成 18 var foodsList = ArrayList<Food>() //<>の中には型を入れる 19 20 private lateinit var binding: ActivityMainBinding 21 22 override fun onCreate(savedInstanceState: Bundle?) { 23 super.onCreate(savedInstanceState) 24 binding = ActivityMainBinding.inflate(layoutInflater) 25 val view = binding.root 26 setContentView(view) 27 28 // load foods 29 foodsList.add(Food("Coffee", R.drawable.coffee_pot)) 30 foodsList.add(Food("Espersso", R.drawable.espresso)) 31 foodsList.add(Food("French Fires", R.drawable.french_fries)) 32 foodsList.add(Food("Honey",R.drawable.honey)) 33 foodsList.add(Food("Strawberry", R.drawable.strawberry_ice_cream)) 34 foodsList.add(Food("Sugar cubes", R.drawable.sugar_cubes)) 35 foodsList.add(Food("French Fires", R.drawable.french_fries)) 36 foodsList.add(Food("Honey",R.drawable.honey)) 37 foodsList.add(Food("Strawberry", R.drawable.strawberry_ice_cream)) 38 foodsList.add(Food("Sugar cubes", R.drawable.sugar_cubes)) 39 adapter = FoodAdapter(this, foodsList) 40 gvFoods.adapter = adapter 41 42 43 gvFoods.setOnItemClickListener { adapterView, view, position, id -> 44 Toast.makeText(this, "${adapterView.getItemAtPosition(position)} ", Toast.LENGTH_SHORT).show() 45 46      //不明点////////////////////////////////////////////////////////////// 47      //xmlファイル id:textViewTopに選択したアイテムの名前を表示したい↓ 48 textViewTop.text = adapterView.getItemAtPosition(position).toString() 49 } 50 } 51 52 class FoodAdapter : BaseAdapter { 53 var foodsList = ArrayList<Food>() 54 var context: Context? = null 55 56 constructor(context: Context, foodsList: ArrayList<Food>) : super() { 57 this.context = context 58 this.foodsList = foodsList 59 } 60 61 override fun getCount(): Int { 62 return foodsList.size 63 } 64 65 override fun getItem(position: Int): Any { 66 return foodsList[position] 67 } 68 69 override fun getItemId(position: Int): Long { 70 return position.toLong() 71 } 72 73 override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { 74 val food = this.foodsList[position] 75 76 var inflator = context!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater 77 var foodView = inflator.inflate(R.layout.food_entry, null) 78 foodView.imgFood.setImageResource(food.image!!) 79 foodView.tvName.text = food.name!! 80 81 return foodView 82 } 83 } 84}

activity_main.xml

1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:orientation="vertical" 7 tools:context="MainActivity"> 8 9 <TextView 10 android:id="@+id/textViewTop" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:textSize="32dp" 14 android:text="TextView" /> 15 16 <GridView 17 android:id="@+id/gvFoods" 18 android:layout_width="match_parent" 19 android:layout_height="match_parent" 20 android:columnWidth="150dp" 21 android:horizontalSpacing="15dp" 22 android:numColumns="auto_fit" 23 android:verticalSpacing="15dp"> 24 25 </GridView> 26 27</LinearLayout>

food.kt

1package com.example.gridview0808a 2 3class Food { 4 var name: String? = null 5 var image: Int? = null 6 7 constructor(name: String, image: Int) { 8 this.name = name 9 this.image = image 10 } 11}

スマホ動作画面の写真を添付します。写真上部にid/textViewTopに選択された画像の名前を表示したいのですが、com.evample......@xxxxxxx
といった表示がされる状態です。(この表示はクリックされた画像ごとに変わります)
イメージ説明

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

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

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

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

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

jimbe

2021/08/08 14:48

このプログラムはどこまで動作していますか。何か例外等発生しているのでしょうか。 >数時間調べて分からなかった 何をどのように数時間お調べになったのでしょう。
msmsmsmsmsms

2021/08/08 22:16

コメントいただきありがとうございます。 プログラム自体は動作しております。 動作画面の写真を追加いたしました。 写真上部にid/textViewTopに選択された画像の名前を表示したいのですが、com.evample......@xxxxxxx といった表示がされる状態です。(この表示はクリックされた画像ごとに変わります) どのように改善すべきであるか教えていただけないでしょうか? >>数時間調べて分からなかった >何をどのように数時間お調べになったのでしょう。 小生が所有するテキスト、及びGoogleにて調べましたが未だ解決できておりません。
jimbe

2021/08/09 01:42

画像添付ありがとうございます。
msmsmsmsmsms

2021/08/10 13:22

返信が遅くなり申し訳ございません。 ようやくな何が駄目であったか理解することができました。 ありがとうございます。 最後にnameを取得する際には、コードをどのように書けばよいか教えていただけないでしょうか? 前) textViewTop.text = adapterView.getItemAtPosition(position).toString() 修正) textViewTop.text = adapter.getView(ここの中身の指定が分からず困っております) getItemAtPosirion(position)はよくわからずに指定しておりました。。 宜しくお願い致します。
guest

回答1

0

ベストアンサー

動作画像にて表示されていますのは、クリックされた "Food オブジェクト自体"の情報です。
例えば、Food("foobar",R.drawable.coffee_pot)を表示してみると、同様の(16進数部分が違うだけの)表示が見られるはずです。
この文字列は具体的には、Food クラスが Object クラスより継承している toString():String メソッドによるもので、オブジェクトのデバッグ情報を表します。
toString():String メソッドは、明示的に呼び出さなくても、例えばオブジェクトを String と結合したりだとか、String が必要なパラメータの個所にオブジェクトを渡したりだとかした場合に自動的にも呼び出されます。

さて、お気づきになったか分かりませんが、上の説明には Food オブジェクトの name は登場しません。動作画像を見る限りでは、Food オブジェクトの name では無く Food オブジェクト自体を表示しているということです。
表示の際に name を指定していますでしょうか?

FoodAdapter の getView メソッドにおきましては

kotlin

1foodView.tvName.text = food.name!!

と name を text に入れていますので name が表示されています。

肝心のクリック時(ItemClickListener)はどうでしょう。

kotlin

1textViewTop.text = adapterView.getItemAtPosition(position).toString()

getItemAtPosition(position) が返したモノを toString で文字列化しています。
getItemAtPosition(position) は何を返しますでしょうか。

投稿2021/08/09 01:59

編集2021/08/09 07:39
jimbe

総合スコア13209

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

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

msmsmsmsmsms

2021/08/10 13:22

返信が遅くなり申し訳ございません。 ようやくな何が駄目であったか理解することができました。 ありがとうございます。 最後にnameを取得する際には、コードをどのように書けばよいか教えていただけないでしょうか? 前) textViewTop.text = adapterView.getItemAtPosition(position).toString() 修正) textViewTop.text = adapter.getView(ここの中身の指定が分からず困っております) getItemAtPosirion(position)はよくわからずに指定しておりました。。 宜しくお願い致します。
jimbe

2021/08/11 01:28 編集

残念ながら、2つの点で惜しいと言わざるを得ません。 まず先に「getItemAtPosition(position) は何を返すか」ですが、表示の通り Food オブジェクトであることはご理解されましたでしょうか。 Food オブジェクトが得られれば、 name が使えますね。 前の adapterView を使う形であれば、 val item = adapterView.getItemAtPosition(position) if(item is Food) { textViewTop.text = item.name } と出来るでしょう。 また、 AdapterView の getItemAtPosition(Position:Int) は内部では Adapter の getItem(position:Int) を呼び出しています。従いまして、adapterView の代わりに Adapter を使うのであれば、 getView(ほにゃらら) では無く getItem(position:Int) です。 そして、 FoodAdapter の getItem() は Any 型となっていますが、これを Food 型とすることで、上の例での型チェックが不要になります。 ちょっと宣言修正: private lateinit var adapter: FoodAdapter //… 型変更: override fun getItem(position: Int): Food { 問題の個所: textViewTop.text = adapter.getItem(position).name 問題の個所で name の前の "~)." まで入力すると続きの選択に(Food クラスのプロパティである) name や image が出てくるでしょう。
msmsmsmsmsms

2021/08/11 00:06

大変親切なご回答ありがとうございます。 おかげさまで理解することができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問