【发布时间】:2021-04-30 14:40:21
【问题描述】:
我是开发安卓应用的新手。
我想使用“Droid Speech”但我不能使用它,因为“Droid Speech”是由 AppCompatActivity 组成的。
我想知道如何把 AppCompatActivity 变成 Fragment。
这是我的代码
class DroidSpeechActivity : AppCompatActivity(), View.OnClickListener,
OnDSListener,
OnDSPermissionsListener {
val TAG = "Activity_DroidSpeech"
private var droidSpeech: DroidSpeech? = null
private var finalSpeechResult: TextView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_droid_speech)
droidSpeech =
DroidSpeech(this, fragmentManager)
droidSpeech!!.setOnDroidSpeechListener(this)
droidSpeech!!.setShowRecognitionProgressView(false)
droidSpeech!!.setOneStepResultVerify(true)
droidSpeech!!.setRecognitionProgressMsgColor(Color.WHITE)
droidSpeech!!.setOneStepVerifyConfirmTextColor(Color.WHITE)
droidSpeech!!.setOneStepVerifyRetryTextColor(Color.WHITE)
droidSpeech!!.setPreferredLanguage("ko-KR")
finalSpeechResult = findViewById(R.id.finalSpeechResult)
start.setOnClickListener(this)
stop.setOnClickListener(this)
}
override fun onPause() {
super.onPause()
if (stop!!.visibility == View.VISIBLE) {
stop!!.performClick()
}
}
override fun onDestroy() {
super.onDestroy()
if (stop!!.visibility == View.VISIBLE) {
stop!!.performClick()
}
}
override fun onClick(view: View) {
when (view.id) {
R.id.start -> {
// Starting droid speech
droidSpeech!!.startDroidSpeechRecognition()
// Setting the view visibilities when droid speech is running
start!!.visibility = View.GONE
stop!!.visibility = View.VISIBLE
}
R.id.stop -> {
// Closing droid speech
droidSpeech!!.closeDroidSpeechOperations()
stop!!.visibility = View.GONE
start!!.visibility = View.VISIBLE
}
}
}
// MARK: DroidSpeechListener Methods
override fun onDroidSpeechSupportedLanguages(currentSpeechLanguage: String, supportedSpeechLanguages: List<String>) {
Log.i(TAG, "Current speech language = $currentSpeechLanguage")
Log.i(TAG, "Supported speech languages = $supportedSpeechLanguages")
if (supportedSpeechLanguages.contains("ko-KR")) {
// Setting the droid speech preferred language as tamil if found
droidSpeech!!.setPreferredLanguage("ko-KR")
// Setting the confirm and retry text in tamil
droidSpeech!!.setOneStepVerifyConfirmText("check")
droidSpeech!!.setOneStepVerifyRetryText("no")
}
}
override fun onDroidSpeechRmsChanged(rmsChangedValue: Float) {
}
override fun onDroidSpeechLiveResult(liveSpeechResult: String) {
Log.i(TAG, "Live speech result = $liveSpeechResult")
}
override fun onDroidSpeechFinalResult(finalSpeechResult: String) {
this.finalSpeechResult!!.text = finalSpeechResult
println("test$finalSpeechResult")
if (droidSpeech!!.continuousSpeechRecognition) {
val colorPallets1 = intArrayOf(Color.RED, Color.GREEN, Color.BLUE, Color.CYAN, Color.MAGENTA)
val colorPallets2 = intArrayOf(Color.YELLOW, Color.RED, Color.CYAN, Color.BLUE, Color.GREEN)
// Setting random color pallets to the recognition progress view
droidSpeech!!.setRecognitionProgressViewColors(if (Random().nextInt(2) == 0) colorPallets1 else colorPallets2)
} else {
stop!!.visibility = View.GONE
start!!.visibility = View.VISIBLE
}
}
override fun onDroidSpeechClosedByUser() {
stop!!.visibility = View.GONE
start!!.visibility = View.VISIBLE
}
override fun onDroidSpeechError(errorMsg: String) {
Toast.makeText(this, errorMsg, Toast.LENGTH_LONG).show()
stop!!.post {
stop!!.performClick()
}
}
// MARK: DroidSpeechPermissionsListener Method
override fun onDroidSpeechAudioPermissionStatus(audioPermissionGiven: Boolean, errorMsgIfAny: String) {
if (audioPermissionGiven) {
start!!.post {
start!!.performClick()
}
} else {
if (errorMsgIfAny != null) {
Toast.makeText(this, errorMsgIfAny, Toast.LENGTH_LONG).show()
}
stop!!.post {
stop!!.performClick()
}
}
}
}
这是尝试更改代码...但是错误
class DroidSpeechActivity : Fragment(), View.OnClickListener,
OnDSListener,
OnDSPermissionsListener {
val TAG = "Activity_DroidSpeech"
private var droidSpeech: DroidSpeech? = null
private var finalSpeechResult: TextView? = null
// MARK: Activity Methods
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Setting the layout;[.
// Initializing the droid speech and setting the listener
droidSpeech =
DroidSpeech(activity?.applicationContext, activity?.getFragmentManager())
droidSpeech!!.setOnDroidSpeechListener(this)
droidSpeech!!.setShowRecognitionProgressView(false)
droidSpeech!!.setOneStepResultVerify(true)
droidSpeech!!.setRecognitionProgressMsgColor(Color.WHITE)
droidSpeech!!.setOneStepVerifyConfirmTextColor(Color.WHITE)
droidSpeech!!.setOneStepVerifyRetryTextColor(Color.WHITE)
droidSpeech!!.setPreferredLanguage("ko-KR")
start.setOnClickListener(this)
stop.setOnClickListener(this)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.activity_droid_speech, container, false)
}
override fun onPause() {
super.onPause()
if (stop!!.visibility == View.VISIBLE) {
stop!!.performClick()
}
}
override fun onDestroy() {
super.onDestroy()
if (stop!!.visibility == View.VISIBLE) {
stop!!.performClick()
}
}
// MARK: OnClickListener Method
override fun onClick(view: View) {
when (view.id) {
R.id.start -> {
// Starting droid speech
droidSpeech!!.startDroidSpeechRecognition()
// Setting the view visibilities when droid speech is running
start!!.visibility = View.GONE
stop!!.visibility = View.VISIBLE
}
R.id.stop -> {
// Closing droid speech
droidSpeech!!.closeDroidSpeechOperations()
stop!!.visibility = View.GONE
start!!.visibility = View.VISIBLE
}
}
}
// MARK: DroidSpeechListener Methods
override fun onDroidSpeechSupportedLanguages(currentSpeechLanguage: String, supportedSpeechLanguages: List<String>) {
Log.i(TAG, "Current speech language = $currentSpeechLanguage")
Log.i(TAG, "Supported speech languages = $supportedSpeechLanguages")
if (supportedSpeechLanguages.contains("ko-KR")) {
// Setting the droid speech preferred language as tamil if found
droidSpeech!!.setPreferredLanguage("ko-KR")
// Setting the confirm and retry text in tamil
droidSpeech!!.setOneStepVerifyConfirmText("check")
droidSpeech!!.setOneStepVerifyRetryText("no")
}
}
override fun onDroidSpeechRmsChanged(rmsChangedValue: Float) {
// Log.i(TAG, "Rms change value = " + rmsChangedValue);
}
override fun onDroidSpeechLiveResult(liveSpeechResult: String) {
Log.i(TAG, "Live speech result = $liveSpeechResult")
}
override fun onDroidSpeechFinalResult(finalSpeechResult: String) {
// Setting the final speech result
this.finalSpeechResult!!.text = finalSpeechResult
println("test$finalSpeechResult")
if (droidSpeech!!.continuousSpeechRecognition) {
val colorPallets1 = intArrayOf(Color.RED, Color.GREEN, Color.BLUE, Color.CYAN, Color.MAGENTA)
val colorPallets2 = intArrayOf(Color.YELLOW, Color.RED, Color.CYAN, Color.BLUE, Color.GREEN)
// Setting random color pallets to the recognition progress view
droidSpeech!!.setRecognitionProgressViewColors(if (Random().nextInt(2) == 0) colorPallets1 else colorPallets2)
} else {
stop!!.visibility = View.GONE
start!!.visibility = View.VISIBLE
}
}
override fun onDroidSpeechClosedByUser() {
stop!!.visibility = View.GONE
start!!.visibility = View.VISIBLE
}
override fun onDroidSpeechError(errorMsg: String) {
// Speech error
stop!!.post { // Stop listening
stop!!.performClick()
}
}
// MARK: DroidSpeechPermissionsListener Method
override fun onDroidSpeechAudioPermissionStatus(audioPermissionGiven: Boolean, errorMsgIfAny: String) {
if (audioPermissionGiven) {
start!!.post { // Start listening
start!!.performClick()
}
} else {
if (errorMsgIfAny != null) {
// Permissions error
}
stop!!.post { // Stop listening
stop!!.performClick()
}
}
}
}
这是错误消息
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at com.example.Jachi3kki.DroidSpeechActivity.onCreateView(DroidSpeechActivity.kt:49)
DroidSpeechActivity.kt:49 行是这个
start.setOnClickListener(this)
如何将我的 AppCompatActivity 转换为片段?
【问题讨论】:
-
欢迎来到 Stack Overflow!与其让别人为你写这一切,你为什么不自己学习片段呢?然后你可以很容易地为你已经得到的东西想出一个粗略的等价物。
-
我试图改变它,但我从上面的 setOnClickListeneras 得到一个错误:(
-
你的问题标题根本没有这么说。如果您对某事有实际问题,那么问这个问题是有意义的。不管怎样,你研究过这个错误吗?
-
哦...对不起。是的,我正在研究错误,先生。我尝试修复此错误...但我无法修复它。
-
你找到这个问题了吗? stackoverflow.com/questions/218384/…
标签: android kotlin android-fragments fragment appcompatactivity