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

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

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

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

メニュー

メニューは、UIにおける仕組みであり、ユーザに機能の表示と実行する手段を与えます。

Kotlin

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

Q&A

解決済

1回答

1160閲覧

Fragment上にあるRecyclerViewのロングタップでメニューを表示したい

bluvenz

総合スコア22

Android

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

メニュー

メニューは、UIにおける仕組みであり、ユーザに機能の表示と実行する手段を与えます。

Kotlin

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

0グッド

0クリップ

投稿2021/12/08 17:16

前提・実現したいこと

Fragment上にあるRecyclerViewのロングタップで画面中央にメニューを表示し、対象データの編集や削除を行いたいと考えています。
メニューのイメージとしては、LINEのトーク一覧でロングタップした際に表示されるメニュー(非表示、通知オフ…)を考えています。

該当のソースコード

ListFragment

1class ListFragment : Fragment() { 2 private var _binding: FragmentListBinding? = null 3 private val binding get() = _binding!! 4 5 private lateinit var realm: Realm 6 7 override fun onCreate(savedInstanceState: Bundle?) { 8 super.onCreate(savedInstanceState) 9 10 realm = Realm.getDefaultInstance() 11 } 12 13 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 14 super.onViewCreated(view, savedInstanceState) 15 16 binding.list.layoutManager = LinearLayoutManager(context) 17 val adapter = ListAdapter(realm.where<List>().findAll()) 18 binding.list.adapter = adapter 19 20 adapter.setOnClickListener { id -> 21 id?.let { 22 Toast.makeText(activity, "Click $it", Toast.LENGTH_SHORT).show() 23 } 24 } 25 adapter.setOnLongClickListener { id -> 26 id?.let { 27 Toast.makeText(activity, "LongClick $it", Toast.LENGTH_SHORT).show() 28 } 29 } 30 } 31 32 override fun onDestroyView() { 33 super.onDestroyView() 34 _binding= null 35 } 36 37 override fun onDestroy() { 38 super.onDestroy() 39 realm.close() 40 } 41}

ListAdapter

1class ListAdapter(data: OrderedRealmCollection<List>) : 2 RealmRecyclerViewAdapter<List, ListAdapter.ViewHolder>(data, true) { 3 4 private var clickListener: ((Long?) -> Unit)? = null 5 private var longClickListener: ((Long?) -> Unit)? = null 6 7 fun setOnClickListener(clickListener: (Long?) -> Unit) { 8 this.clickListener = clickListener 9 } 10 11 fun setOnLongClickListener(longClickListener: (Long?) -> Unit) { 12 this.longClickListener = longClickListener 13 } 14 15 init { 16 setHasStableIds(true) 17 } 18 19 class ViewHolder(cell: View) : RecyclerView.ViewHolder(cell) { 20 val image: ImageView = cell.findViewById(R.id.image) 21 val text: TextView = cell.findViewById(R.id.text) 22 } 23 24 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { 25 val inflater = LayoutInflater.from(parent.context) 26 val view = inflater.inflate(R.layout.list_layout, parent, false) 27 28 return ViewHolder(view) 29 } 30 31 override fun onBindViewHolder(holder: ViewHolder, position: Int) { 32 val list: List? = getItem(position) 33 holder.text.text = list?.text 34 35 holder.itemView.setOnClickListener { 36 clickListener?.invoke(list?.id) 37 } 38 39 holder.itemView.setOnLongClickListener { 40 longClickListener?.invoke(list?.id) 41 true 42 } 43 } 44 45 override fun getItemId(position: Int): Long { 46 return getItem(position)?.id ?: 0 47 } 48}

試したこと

試行錯誤してActivity や Fragment 、 Adapter に registerForContextMenu をコーディングしてみたのですが onCreateContextMenu が動いてくれませんでした。

勉強中のため的を射ない内容が含まれていた時は申し訳ありません。
初歩的な質問で恐縮ですが、どうぞよろしくお願いします。

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

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

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

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

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

jimbe

2021/12/08 17:21 編集

LINEをやっていませんのでイメージが全く分からないのですが。 自分でダイアログを表示すれば良いのではないでしょうか。
guest

回答1

0

自己解決

ありがとうございます。ダイアログで実現することができました。

class ListDialog(private val title: String, @ArrayRes private val items: Int, private val itemSelected: (which: Int) -> Unit) : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val builder = AlertDialog.Builder(requireActivity()) // setMessageを使うとリスト表示されない builder.setTitle(title) .setItems(items) { dialog, which -> itemSelected(which) } return builder.create() } }

「何ができるのか」という部分の知識がまだ足りず、稚拙な質問ですみませんでした。
引き出しを増やしていけるよう勉強します。

投稿2021/12/09 18:40

bluvenz

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問