Кнопки Android отключены при нажатии кнопки «Назад»

#java #android #kotlin

Вопрос:

Я новичок в программировании на Android, и меня смущает жизненный цикл активности. Я прочитал несколько статей об этом, но все еще не могу понять, как заставить кнопку «Назад» работать.

У меня есть основное действие с кнопками, которые переходят к новым действиям, и это работает нормально, однако, когда я использую кнопку «Назад» устройства, когда оно возвращается к основному действию, кнопки отключены. Я думаю, это потому, что мне нужно повторно инициализировать Основное действие, но я не знаю, как это сделать. Я попробовал снова, но это не сработало. Вот два моих вида деятельности:

 package com.rootsofempathy.recoveryjunior

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageButton

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val button_gr = findViewById<ImageButton>(R.id.gr_btn)
        button_gr.setOnClickListener {
            println("Button Clicked")
            val activity2Intent = Intent(applicationContext, getting_ready::class.java)
            startActivity(activity2Intent)
        }

        val buttonOne = findViewById<ImageButton>(R.id.theme1_btn)
        buttonOne.setOnClickListener {
            val activity2Intent = Intent(applicationContext, Theme_One::class.java)
            startActivity(activity2Intent)
        }

        val buttonTwo = findViewById<ImageButton>(R.id.theme2_btn)
        buttonTwo.setOnClickListener {
            val activity2Intent = Intent(applicationContext, Theme_Two::class.java)
            startActivity(activity2Intent)
        }

        val buttonThree = findViewById<ImageButton>(R.id.theme3_btn)
        buttonThree.setOnClickListener {
            val activity2Intent = Intent(applicationContext, Theme_Three::class.java)
            startActivity(activity2Intent)
        }

        val buttonFour = findViewById<ImageButton>(R.id.theme4_btn)
        buttonFour.setOnClickListener {
            val activity2Intent = Intent(applicationContext, Theme_Four::class.java)
            startActivity(activity2Intent)
        }

        val buttonFive = findViewById<ImageButton>(R.id.theme5_btn)
        buttonFive.setOnClickListener {
            val activity2Intent = Intent(applicationContext, Theme_Five::class.java)
            startActivity(activity2Intent)
        }

        val buttonSix = findViewById<ImageButton>(R.id.theme6_btn)
        buttonSix.setOnClickListener {
            val activity2Intent = Intent(applicationContext, Theme_Six::class.java)
            startActivity(activity2Intent)
        }

        val buttonSeven = findViewById<ImageButton>(R.id.theme7_btn)
        buttonSeven.setOnClickListener {
            val activity2Intent = Intent(applicationContext, Theme_Seven::class.java)
            startActivity(activity2Intent)
        }

        val buttonEight = findViewById<ImageButton>(R.id.theme8_btn)
        buttonEight.setOnClickListener {
            val activity2Intent = Intent(applicationContext, Theme_Eight::class.java)
            startActivity(activity2Intent)
        }

        val buttonNine = findViewById<ImageButton>(R.id.theme9_btn)
        buttonNine.setOnClickListener {
            val activity2Intent = Intent(applicationContext, Theme_Nine::class.java)
            startActivity(activity2Intent)
        }

        val buttonTen = findViewById<ImageButton>(R.id.theme10_btn)
        buttonTen.setOnClickListener {
            val activity2Intent = Intent(applicationContext, Theme_Ten::class.java)
            startActivity(activity2Intent)
        }
    }
}
 
 class Theme_One : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_theme_one)

        val config = PdfActivityConfiguration.Builder(this@Theme_One).build()

        val assetFile = Uri.parse("file:///android_asset/theme_one.pdf")
        PdfActivity.showDocument(this@Theme_One, assetFile, null, config)

    }
}
 
 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.rootsofempathy.recoveryjunior">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.RecoveryJunior">

        <activity
            android:name=".Theme_Ten"
            android:exported="true" />
        <activity
            android:name=".Theme_Nine"
            android:exported="true" />
        <activity
            android:name=".Theme_Eight"
            android:exported="true" />
        <activity
            android:name=".Theme_Seven"
            android:exported="true" />
        <activity
            android:name=".Theme_Six"
            android:exported="true" />
        <activity
            android:name=".Theme_Five"
            android:exported="true" />
        <activity
            android:name=".Theme_Four"
            android:exported="true" />
        <activity
            android:name=".Theme_Three"
            android:exported="true" />
        <activity
            android:name=".Theme_Two"
            android:exported="true" />
        <activity
            android:name=".Theme_One"
            android:exported="true" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.pspdfkit.ui.PdfActivity"
            android:theme="@style/RecoveryJunior.PSPDFKitTheme"
            android:windowSoftInputMode="adjustNothing" />
        <activity
            android:name=".getting_ready"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar"
            android:windowSoftInputMode="adjustNothing" />

        <meta-data
            android:name="pspdfkit_license_key"
            android:value="" />
    </application>

</manifest>
 

Если кто-нибудь может указать мне на наглядный пример того, как правильно заставить кнопку «Назад» перезапустить основные кнопки активности, я был бы признателен.

Комментарии:

1.В приведенном выше коде нет ничего, указывающего на то, что Button внутренняя часть вашего MainActivity устройства должна быть отключена — я предполагаю, что здесь отсутствует какой-то код? Вам не нужно override onBackPressed или finish() ваш текущий Activity , так как это делается автоматически при нажатии кнопки «Назад», потому что Android удерживает экраны как a stack , поэтому при нажатии кнопки «Назад» текущий видимый экран выскакивает и полностью исчезает. Посмотрите здесь, если вы хотите вернуть результат: developer.android.com/training/basics/intents/result

2. Отсутствующего кода нет. Единственный другой код в основной деятельности-это еще 9 кнопок. Одна вещь, которую я только что заметил, заключается в том, что, если я дважды нажму кнопку «Назад», кнопки будут работать, и это странно, потому что я думал, что, дважды нажав кнопку «Назад», вы должны выйти из приложения.

3. Хорошо, значит, все-таки не хватает какого-то кода; -) Значит, у всех 9 других кнопок OnClickListener тоже есть? И если да, то может ли быть так, что одному из OnClickListeners них звонят дважды?

4. Есть какой-то недостающий код, приведенный выше код не имеет проблем!

5. Я опубликовал код полностью. Извините, я просто пытался быть кратким

Ответ №1:

Вы можете решить эту проблему двумя способами:

#1 Звонок finish() после запуска PdfActivity

 class Theme_One : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_theme_one)

        val config = PdfActivityConfiguration.Builder(this@Theme_One).build()

        val assetFile = Uri.parse("file:///android_asset/theme_one.pdf")
        PdfActivity.showDocument(this@Theme_One, assetFile, null, config)
        finish()
    }
}
 

#2 В соответствии с вашим текущим кодом вы можете напрямую начать PdfActivity и пропустить Theme_one действие при нажатии кнопки

 buttonOne.setOnClickListener {
        
        val config = PdfActivityConfiguration.Builder(this).build()

        val assetFile = Uri.parse("file:///android_asset/theme_one.pdf")
        PdfActivity.showDocument(this@Theme_One, assetFile, null, config)

    }
 

Комментарии:

1. Я хотел бы отдать за это 100 голосов. Большое тебе спасибо, нитеш

2. Рад, что это помогло 🙂 @Твиггит