Как вызвать новую активность в пользовательском адаптере для повторного просмотра в выпадающем меню? - PullRequest
0 голосов
/ 06 апреля 2020

Я создал recycleview, какие объекты также имеют раскрывающееся меню, во втором пункте раскрывающегося меню я хочу вызвать новое действие? как я это сделал? Спасибо

 //Calling menu menu_prijem_posiljke to display menu options on click on three dots
        holder.view.img_more.setOnClickListener{
            val popupMenu = PopupMenu(holder.view.context, it ,Gravity.START)
            popupMenu.setOnMenuItemClickListener { item ->
                when(item.itemId){
                    R.id.storniraj ->{
                        Toast.makeText(holder.view.context,"this is toast message",Toast.LENGTH_SHORT).show()
                        true
                    }
                    R.id.detalji->{
                        Toast.makeText(holder.view.context,"this is toast message",Toast.LENGTH_SHORT).show()
                        true
                    }
                    else -> false
                }
            }
            popupMenu.inflate(R.menu.menu_prijem_posiljke)
            popupMenu.show()
        }
    }

Ответы [ 5 ]

1 голос
/ 06 апреля 2020

Это способ вызова startActivity из адаптера, если вы не передали контекстную ссылку в конструкторе адаптера.

holder.view.img_more.context.startActivity(
                            Intent(
                                holder.view.img_more.context,
                                MainActivity::class.java
                            )
                        )

И если вы передали контекстную ссылку в свой адаптер Тогда вы можете напрямую использовать экземпляр контекста вместо holder.view.img_more.context .

0 голосов
/ 06 апреля 2020

Лучший способ сделать это - реализовать перенаправление в своей Активности, а Нет в адаптере , и вы можете добиться этого, выполнив следующие действия:

Шаг 1: Добавьте параметр для вашего адаптера с именем onMenuItemClicked:

class YourAdapter(var onMenuItemClicked: (Int) -> Boolean) : RecyclerView.Adapter<Holder>()

Шаг 2: Измените свой код на этот

holder.view.imageViewMore.setOnClickListener {
                val popupMenu = PopupMenu(holder.view.context, it, Gravity.START)
                popupMenu.setOnMenuItemClickListener { item ->
                    onMenuItemClicked(item.itemId)
                }
                popupMenu.inflate(R.menu.menu_prijem_posiljke)
                popupMenu.show()
            }

Шаг 3: В своей деятельности инициализируйте адаптер следующим образом:

val adapter = YourAdapter {
                    when(itemId){
                        R.id.storniraj ->{
                            Toast.makeText(holder.view.context,"this is toast message",Toast.LENGTH_SHORT).show()
                            true
                        }
                        R.id.detalji->{
                            startActivity(this@MainActivity , SecondActivity::class.java)
                            true
                        }
                        else -> false
                    }
                }
0 голосов
/ 06 апреля 2020

Попробуйте это

 popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.item1:
                        //handle item1 click
                        return true;
                    case R.id.item2:
                         view.getContext().startActivity(new Intent(v.getContext(), ToActivity.class));
                        return true;
                    case R.id.item3:
                        //handle item3 click
                        return true;
                    default:
                        return false;
                }
            }
        });
0 голосов
/ 06 апреля 2020

Вы можете сделать следующее:

val intent = Intent(Context, NextClass::class.java)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent)

Это может начать новое действие с вашего adapter. Вы можете передать контекст activity или fragment через конструктор.

Надеюсь, это поможет

0 голосов
/ 06 апреля 2020

Может быть попробовать это ...

val intent = Intent()
intent.setClass(holder.view.context, MyOtherActivity::class.java)
startActivity(intent)
//end current activity if required
//finish()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...