Android действие share работает только один раз - PullRequest
0 голосов
/ 18 июня 2020

У меня есть меню в верхней части моей активности с кнопкой поделиться.

enter image description here

Когда я нажимаю на него, он работает, но я могу больше не нажимать на него.

enter image description here

Это мой код:

override fun onCreateOptionsMenu(menu: Menu): Boolean {
        super.onCreateOptionsMenu(menu)

        val menuItemShare = menu.add(Menu.NONE, R.id.action_share, Menu.NONE, "")
        menuItemShare.setIcon(R.drawable.ic_share)
        menuItemShare.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
        mShareActionProvider = ShareActionProvider(this)

        return true
    }

И:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            android.R.id.home -> {
                onBackPressed()
                return true
            }
            R.id.action_share -> {
                MenuItemCompat.setActionProvider(item, mShareActionProvider)

                val sendIntent = Intent().apply {
                    action = Intent.ACTION_SEND
                    putExtra(Intent.EXTRA_TEXT, "...")
                    type = "text/plain"
                }

                val shareIntent = Intent.createChooser(sendIntent, resources.getString(R.string.share))

                if (sendIntent.resolveActivity(packageManager) != null) {
                    startActivity(shareIntent)
                }

                return true
            }
        }

        return super.onOptionsItemSelected(item)
    }

Как сделать так, чтобы кнопка работала постоянно, а не один раз?

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Лучший подход, соответствующий вашим требованиям. Просто добавьте ресурс меню в res с меню общего элемента. Вот так:

menu_share. xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_share"
        android:icon="@drawable/ic_share"
        android:title="@string/share"
        app:showAsAction="always" />
</menu>

затем просто увеличьте меню:

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    getMenuInflater().inflate(R.menu.menu_share, menu)
    return true
}

, а затем установите действие на это:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        ...

        R.id.action_share -> {
            val sendIntent = Intent()
            sendIntent.action = Intent.ACTION_SEND
            sendIntent.putExtra(Intent.EXTRA_TEXT,getString(R.string.share))
            sendIntent.type = "text/plain"
            startActivity(Intent.createChooser(sendIntent, "Share from :"))
            return true
        }
    }
    return super.onOptionsItemSelected(item)
}

Надеюсь, это сработает для вас !!

0 голосов
/ 18 июня 2020

Это лучший код, который я должен создать, попробуйте это

val text = "Your friend $sharename wants you to check out our app!\nVisit us at"
            val intent = Intent(Intent.ACTION_SEND)
            intent.putExtra(Intent.EXTRA_TEXT, text)
            intent.type = "text/plain"
            startActivity(Intent.createChooser(intent, "Choose a way to share:"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...