如何在 Android 中制作分享按钮 - Kotlin

Ren*_*lza 6 android share button kotlin

如何制作一个有效的共享按钮,以便可以共享某些报价
\n(它共享的是文本视图中的文本)

\n\n

我在网上找到了如下代码:

\n\n
override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\nshare_text_1_btn.setOnClickListener {\n            val t1 = share_text_1_t.text.toString()\n            val shareIntent = Intent()\n            shareIntent.action = Intent.ACTION_SEND\n            shareIntent.type="text/plain"\n            shareIntent.putExtra(Intent.EXTRA_TEXT, t1)\n            startActivity(Intent.createChooser(shareIntent,"Share via"))\n        }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是当我激活 setOnClickListener 时,当我打开片段时应用程序崩溃
\n并且没有任何东西是红色的

\n这是我的所有导入:

\n\n
import android.content.ClipData\nimport android.content.ClipboardManager\nimport android.content.Intent\nimport android.os.Bundle\nimport com.google.android.material.floatingactionbutton.FloatingActionButton\nimport com.google.android.material.snackbar.Snackbar\nimport androidx.navigation.findNavController\nimport androidx.navigation.ui.AppBarConfiguration\nimport androidx.navigation.ui.navigateUp\nimport androidx.navigation.ui.setupActionBarWithNavController\nimport androidx.navigation.ui.setupWithNavController\nimport androidx.drawerlayout.widget.DrawerLayout\nimport com.google.android.material.navigation.NavigationView\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.appcompat.widget.Toolbar\nimport android.view.Menu\nimport android.widget.Toast\nimport androidx.fragment.app.Fragment\nimport kotlinx.android.synthetic.main.fragment_blogs.*\nimport kotlinx.android.synthetic.main.fragment_share.*\n\nimport com.example.blogesther.ui.home.HomeFragment\nimport kotlinx.android.synthetic.main.activity_main.*\nimport java.util.*\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的 xml 代码:

\n\n
<?xml version="1.0" encoding="utf-8"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\n    xmlns:app="http://schemas.android.com/apk/res-auto"\n    xmlns:tools="http://schemas.android.com/tools"\n    android:layout_width="match_parent"\n    android:layout_height="match_parent">\n\n\n    <ScrollView\n        android:layout_width="match_parent"\n        android:layout_height="match_parent">\n\n        <androidx.constraintlayout.widget.ConstraintLayout\n            android:layout_width="match_parent"\n            android:layout_height="wrap_content">\n\n            <TextView\n                android:id="@+id/share_title_text"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginTop="25dp"\n                android:text="@string/share_title"\n                android:textSize="50sp"\n                android:textFontWeight="100"\n                app:layout_constraintEnd_toEndOf="parent"\n                app:layout_constraintStart_toStartOf="parent"\n                app:layout_constraintTop_toTopOf="parent" />\n\n            <TextView\n                android:id="@+id/share_text_1_t"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginTop="25dp"\n                android:text="@string/share_text_1"\n                app:layout_constraintEnd_toStartOf="@+id/share_text_1_btn"\n                app:layout_constraintStart_toStartOf="parent"\n                app:layout_constraintTop_toBottomOf="@+id/share_title_text" />\n\n            <TextView\n                android:id="@+id/share_text_2_t"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginTop="50dp"\n                android:text="@string/share_text_2"\n                app:layout_constraintEnd_toStartOf="@+id/share_text_2_btn"\n                app:layout_constraintStart_toStartOf="parent"\n                app:layout_constraintTop_toBottomOf="@+id/share_text_1_t" />\n\n            <TextView\n                android:id="@+id/share_text_3_t"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginTop="50dp"\n                android:text="@string/share_text_3"\n                app:layout_constraintEnd_toStartOf="@+id/share_text_3_btn"\n                app:layout_constraintStart_toStartOf="parent"\n                app:layout_constraintTop_toBottomOf="@+id/share_text_2_t" />\n\n            <TextView\n                android:id="@+id/share_text_4_t"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginTop="50dp"\n                android:text="@string/share_text_4"\n                app:layout_constraintEnd_toStartOf="@+id/share_text_4_btn"\n                app:layout_constraintStart_toStartOf="parent"\n                app:layout_constraintTop_toBottomOf="@+id/share_text_3_t" />\n\n            <TextView\n                android:id="@+id/share_text_5_t"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginTop="50dp"\n                android:text="@string/share_text_5"\n                app:layout_constraintEnd_toStartOf="@+id/share_text_5_btn"\n                app:layout_constraintStart_toStartOf="parent"\n                app:layout_constraintTop_toBottomOf="@+id/share_text_4_t" />\n\n            <TextView\n                android:id="@+id/share_text_6_t"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginTop="50dp"\n                android:text="@string/share_text_6"\n                app:layout_constraintEnd_toStartOf="@+id/share_text_6_btn"\n                app:layout_constraintStart_toStartOf="parent"\n                app:layout_constraintTop_toBottomOf="@+id/share_text_5_t" />\n\n            <com.google.android.material.floatingactionbutton.FloatingActionButton\n                android:id="@+id/share_text_1_btn"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginEnd="50dp"\n                android:clickable="true"\n                android:scaleX="1"\n                android:scaleY="1"\n                app:layout_constraintBottom_toBottomOf="@+id/share_text_1_t"\n                app:layout_constraintEnd_toEndOf="parent"\n                app:layout_constraintTop_toTopOf="@+id/share_text_1_t"\n                app:srcCompat="@drawable/ic_share_white_50dp" />\n\n            <com.google.android.material.floatingactionbutton.FloatingActionButton\n                android:id="@+id/share_text_2_btn"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginEnd="50dp"\n                android:clickable="true"\n                android:scaleX="1"\n                android:scaleY="1"\n                app:layout_constraintBottom_toBottomOf="@+id/share_text_2_t"\n                app:layout_constraintEnd_toEndOf="parent"\n                app:layout_constraintTop_toTopOf="@+id/share_text_2_t"\n                app:srcCompat="@drawable/ic_share_white_50dp" />\n\n            <com.google.android.material.floatingactionbutton.FloatingActionButton\n                android:id="@+id/share_text_3_btn"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginEnd="50dp"\n                android:clickable="true"\n                android:scaleX="1"\n                android:scaleY="1"\n                app:layout_constraintBottom_toBottomOf="@+id/share_text_3_t"\n                app:layout_constraintEnd_toEndOf="parent"\n                app:layout_constraintTop_toTopOf="@+id/share_text_3_t"\n                app:srcCompat="@drawable/ic_share_white_50dp" />\n\n            <com.google.android.material.floatingactionbutton.FloatingActionButton\n                android:id="@+id/share_text_4_btn"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginEnd="50dp"\n                android:clickable="true"\n                android:scaleX="1"\n                android:scaleY="1"\n                app:layout_constraintBottom_toBottomOf="@+id/share_text_4_t"\n                app:layout_constraintEnd_toEndOf="parent"\n                app:layout_constraintTop_toTopOf="@+id/share_text_4_t"\n                app:srcCompat="@drawable/ic_share_white_50dp" />\n\n            <com.google.android.material.floatingactionbutton.FloatingActionButton\n                android:id="@+id/share_text_5_btn"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginEnd="50dp"\n                android:clickable="true"\n                android:scaleX="1"\n                android:scaleY="1"\n                app:layout_constraintBottom_toBottomOf="@+id/share_text_5_t"\n                app:layout_constraintEnd_toEndOf="parent"\n                app:layout_constraintTop_toTopOf="@+id/share_text_5_t"\n                app:srcCompat="@drawable/ic_share_white_50dp" />\n\n            <com.google.android.material.floatingactionbutton.FloatingActionButton\n                android:id="@+id/share_text_6_btn"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_marginEnd="50dp"\n                android:clickable="true"\n                android:scaleX="1"\n                android:scaleY="1"\n                app:layout_constraintBottom_toBottomOf="@+id/share_text_6_t"\n                app:layout_constraintEnd_toEndOf="parent"\n                app:layout_constraintTop_toTopOf="@+id/share_text_6_t"\n                app:srcCompat="@drawable/ic_share_white_50dp" />\n        </androidx.constraintlayout.widget.ConstraintLayout>\n    </ScrollView>\n</androidx.constraintlayout.widget.ConstraintLayout>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是日志猫:

\n\n
2020-03-17 12:29:03.153 28028-28028/com.example.blogesther E/AndroidRuntime: FATAL EXCEPTION: main\n    Process: com.example.blogesther, PID: 28028\n    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.blogesther/com.example.blogesther.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method \'void com.google.android.material.floatingactionbutton.FloatingActionButton.setOnClickListener(android.view.View$OnClickListener)\' on a null object reference\n        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3121)\n        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3264)\n        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)\n        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)\n        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)\n        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955)\n        at android.os.Handler.dispatchMessage(Handler.java:106)\n        at android.os.Looper.loop(Looper.java:214)\n        at android.app.ActivityThread.main(ActivityThread.java:7063)\n        at java.lang.reflect.Method.invoke(Native Method)\n        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)\n        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)\n     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method \'void com.google.android.material.floatingactionbutton.FloatingActionButton.setOnClickListener(android.view.View$OnClickListener)\' on a null object reference\n        at com.example.blogesther.MainActivity.onCreate(MainActivity.kt:50)\n        at android.app.Activity.performCreate(Activity.java:7327)\n        at android.app.Activity.performCreate(Activity.java:7318)\n        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1275)\n        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3101)\n        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3264)\xc2\xa0\n        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)\xc2\xa0\n        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)\xc2\xa0\n        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)\xc2\xa0\n        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955)\xc2\xa0\n        at android.os.Handler.dispatchMessage(Handler.java:106)\xc2\xa0\n        at android.os.Looper.loop(Looper.java:214)\xc2\xa0\n        at android.app.ActivityThread.main(ActivityThread.java:7063)\xc2\xa0\n        at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)\xc2\xa0\n        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)\xc2\xa0\n
Run Code Online (Sandbox Code Playgroud)\n

Cyb*_*ark 9

尝试这个:

val share_text_1_btn = findViewById<com.google.android.material.floatingactionbutton.FloatingActionButton>(R.id.share_text_1_btn)
share_text_1_btn.setOnClickListener { 
            val intent= Intent()
            intent.action=Intent.ACTION_SEND
            intent.putExtra(Intent.EXTRA_TEXT,"Hey Check out this Great app:")
            intent.type="text/plain"
            startActivity(Intent.createChooser(intent,"Share To:"))
}
Run Code Online (Sandbox Code Playgroud)

关于多个应用程序接收隐式意图的文档

您也可以使用 Xml onClick 属性来完成此操作,只需将其添加到按钮并在错误下拉列表中自动生成函数(alt+enter)

android:onClick="shareIntent"

然后只需将点击监听器的内容复制到生成的函数中即可。快速而简单的解决方案可以避免您可能遇到的大多数空指针异常。