我是Android Studio和編程方面的新手,我正試圖制作一個應用程式,在其中從一個活動中呼叫一個片段(通過View.GONE屬性使螢屏上的部分資訊消失,同時使其出現包含我的片段的FrameLayout)。問題是,在這樣做的時候,在我試圖呼叫的片段里面,有一個按鈕可以關閉這個片段并回傳到之前的活動,但是當我點擊這個按鈕的時候,它讓我回傳到MainActivity,而不是我之前點擊按鈕的那個活動,我的錯誤會是什么?我附上了代碼和一個GIF,以便你能看到我做錯了什么,我將感謝你的幫助(順便說一下,英語不是我的母語,所以如果這個解釋寫得不好,我將表示歉意)
帶有GIF的圖片。
帶有視覺解釋的Gif: https://s9.gifyu.com/images/gif_explanation.gif 我在DatosPokemonActivity中的代碼(注意,按鈕中的函式也有一個對PokeAPi的呼叫,但我認為這不是問題) 我在StatsFragment的代碼 我想這是解釋我的問題的最好方式,如果你想了解更多資訊,請隨時詢問,謝謝 :D !! 編輯:按照要求,這里是StatsFragment和DatosPokemonActivity的.xml代碼 .xml DatosPokemonActivity .xml for StatsFragment uj5u.com熱心網友回復: 你的代碼的問題是你在代碼中沒有充分使用片段的力量。如果你的代碼中有片段,你就不應該為任何目的使用Activity。在你的DatosPokemonActivity xml中,你應該只有FrameLayout來幫助你啟動你的片段。其余的布局,你需要將它們轉移到一個新的片段。
活動和片段之間的關系 :
一個活動是一組片段所在的地方,并繼承了它的生命周期。
你的問題的原因 :
由于你的DatosPokemonActivity只有一個Fragment,所以當你隱藏/backstack StatsFragment時,由于它的backstack中沒有任何Fragment,它會導航到它的前一個Activity,因此你會錯過DatosPokemonActivity上的所有資訊。
解決方案 :
創建一個新的片段。將其視為資訊片段。將所有的xml代碼(除了你的FrameLayout)從DatosPokemonActivity轉移到資訊片段以及所需代碼。現在在啟動你的DatosPokemonActivity的時候,啟動資訊片段。現在,當點擊統計按鈕時,用StatsFragment替換Information Fragment,同時不要忘記將InformationFragment添加到backStack中。現在,在你的關閉按鈕onClickListener中只需使用fragmentManager.popBackStack并回到你的資訊片段 uj5u.com熱心網友回復: 在StatsFragment 試試這個。 如果你沒有使用Jetpack mb這個:
標籤: 下一篇:如何在其他片段中重復使用一個布局
package com.example.Pokedexv4
import android.app.Activity
import android.content.Intent
import android.content.pm.PackageManager
import android.media.MediaPlayer
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import com.example.pokedexv4.APIConexion.Retrofit
import com.example.pokedexv4.databinding.ActivityDatosPokemonBinding
import com.example.pokedexv4.datosdeAPI.Ability
import com.example.pokedexv4.datosdeAPI.PokemonEsqueleto
import com.example.pokedexv4.datosdeAPI2.FlavorTextEntry
import com.example.pokedexv4.datosdeAPI2.PokemonDescripcion
import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.activity_datos_pokemon.*.
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers.
import kotlinx.coroutines. launch
import java.lang.NullPointerException
class DatosPokemonActivity : AppCompatActivity(){
private lateinit var binding: ActivityDatosPokemonBinding
override fun onCreate(servedInstanceState: Bundle? ){
super.onCreate(s savedInstanceState)
binding = ActivityDatosPokemonBinding.inflate(layoutInflater)
setContentView(binding.root)
supportActionBar.hide()
datospkm()
normalOshiny()
visualizador()
pidePermiso()
cambioStatFragment(posicion)
}
fun cambioStatFragment(position: String) {
val statsFragment = StatsFragment()
binding.STATS.setOnClickListener {
pantallaDatos.visibility = View.GONE
frameFragments.isVisible = true
CoroutineScope(Dispatchers.IO).啟動 {
val respuesta =
Retrofit.getRetrofit.pokemonesPokedex("$position"/span>) //位置在串列中。
if (respuesta.isSuccessful) {
在UiThread上運行 {
val estadisticas = respuesta.body()!
val hp = estadisticas.stats[0] .base_stat
val atk = estadisticas.stats[1] .base_stat
val def = estadisticas.stats[2] .base_stat
val spatk = estadisticas.stats[3] .base_stat
val spdef = estadisticas.stats[4] .base_stat
val spd = estadisticas.stats[5] .base_stat
var datos: Bundle = Bundle()
datos.putString("pasarhp"/span>, hp.toString()
datos.putString("pasaratk", atk.toString()
datos.putString("pasardef", def.toString()
datos.putString("pasarspatk", spatk.toString())
datos.putString("pasarspdef", spdef.toString())
datos.putString("pasarspd", spd.toString()
statsFragment.arguments = datos
}
supportFragmentManager.beginTransaction().apply {
replace(R.id.frameFragments, statsFragment)
addToBackStack("grafico") //<--?
提交()
}
}
}
}
}
}
package com.example.pokedexv4
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import com.example.pokedexv4.databinding.FragmentStatsBinding
import com.github.mikephil.charting.data.RadarData
import com.github.mikephil.charting.data.RadarDataSet
import com.github.mikephil.charting.data.RadarEntry
import com.github.mikephil.charting.interfaces.datasets.IRadarDataSet
import kotlinx.android.synthetic.main.activity_datos_pokemon.*
class StatsFragment : Fragment(R.layout.fragment_stats){
private var _binding: FragmentStatsBinding? = null
private val binding get() = _binding!
override fun onCreateView(
膨脹器。LayoutInflater,
容器。ViewGroup?
savedInstanceState。Bundle?
)。視圖? {
_binding = FragmentStatsBinding.inflate(inflater, container, false)
cerrarGrafico()
return binding.root
}
fun cerrarGrafico() {
binding.btnCerrar.setOnClickListener {
frameFragments!!.visibility = View.GONE
pantallaDatos.isVisible = 真
val activity = view?.context as AppCompatActivity
activity.supportFragmentManager?.beginTransaction()?.hide(this) ?.commit()
}
}
}
<?xml version="1.0" encoding="utf-8"? >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"?
xmlns:tools="http://schemas.android.com/tools"。
android:layout_width="match_parent"/span>
android:layout_height="match_parent"/span>
android:background="@drawable/fondoinfopkmynavegador"/span>
tools:context=".DatosPokemonActivity"。
android:orientation="垂直">
<FrameLayout
android:id="@ id/frameFragments"/span>
android:layout_width="match_parent"。
android:layout_height="345dp"/span>
android:layout_marginTop="143.4dp"/span>
android:layout_marginStart="40.8dp"/span>
android:layout_marginEnd="40.8dp"/span>
android:layout_marginBottom="18dp"/span>
android:visibility="消失">
</FrameLayout>
<LinearLayout
android:id="@ id/pantallaDatos"/span>
android:layout_width="wrap_content"/span>
android:layout_height="wrap_content"/span>
android:layout_marginStart="42dp"/span>
android:layout_marginTop="145dp"/span>
android:layout_marginEnd="42dp"/span>
android:orientation="垂直">
<LinearLayout
android:layout_width="326dp"/span>
android:layout_height="245dp"/span>
android:orientation="horizontal">
<LinearLayout
android:layout_width="210dp"/span>
android:layout_height="245dp"/span>
android:orientation="垂直">
<LinearLayout
android:layout_width="210dp"/span>
android:layout_height="193dp"/span>
android:orientation="horizontal">
<ImageView
android:id="@ id/imgpkm"/span>
android:layout_width="180dp"/span>
android:layout_height="180dp"/span>
android:contentDescription="@string/contentDescrip"/span>
tools:src="@mipmap/pkm001" />
<ImageView
android:id="@ id/imgpkmshiny"/span>
android:layout_width="180dp"/span>
android:layout_height="180dp"/span>
android:contentDescription="@string/contentDescrip"/span>
android:visibility="消失"。
tools:src="@mipmap/pkm002" />
<LinearLayout
android:layout_width="30dp"/span>
android:layout_height="200dp"/span>
android:orientation="垂直">
<ImageButton
android:id="@ id/btnNormalVersion"/span>
android:layout_width="30dp"/span>
android:layout_height="25dp"/span>
android:layout_marginTop="5dp"/span>
android:background="@null"/span>
android:contentDescription="@string/contentDescrip"/span>
android:scaleType="fitCenter"/span>
android:src="@drawable/normalpokemon"。
tools:ignore="TouchTargetSizeCheck,ImageContrastCheck,SpeakableTextPresentCheck,DuplicateSpeakableTextCheck" />
<ImageButton
android:id="@ id/btnShinyVersion"/span>
android:layout_width="30dp"/span>
android:layout_height="25dp"/span>
android:layout_marginTop="135dp"/span>
android:background="@null"/span>
android:contentDescription="@string/contentDescrip"/span>
android:scaleType="fitCenter"/span>
android:src="@drawable/destelloshiny"
tools:ignore="TouchTargetSizeCheck,SpeakableTextPresentCheck,ImageContrastCheck" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="212dp"/span>
android:layout_height="match_parent"/span>
android:orientation="horizontal">
<LinearLayout
android:layout_width="35dp"/span>
android:layout_height="match_parent"/span>
android:orientation="垂直">
<ImageView
android:layout_width="20dp"/span>
android:layout_height="20dp"/span>
android:layout_marginStart="8dp"/span>
android:layout_marginTop="8dp"/span>
android:contentDescription="@string/contentDescrip"/span>
android:src="@drawable/ic_baseline_height_24" />
<ImageView
android:layout_width="20dp"/span>
android:layout_height="20dp"/span>
android:layout_marginStart="8dp"/span>
android:layout_marginTop="2dp"/span>
android:contentDescription="@string/contentDescrip"/span>
android:src="@drawable/peso" />
</LinearLayout>
<LinearLayout
android:layout_width="43dp"/span>
android:layout_height="match_parent"/span>
android:orientation="垂直">
<TextView
android:id="@ id/altura"/span>
android:layout_width="43dp"/span>
android:layout_height="22dp"/span>
android:layout_marginTop="3dp"/span>
android:gravity="end"/span>
android:textSize="20sp"/span>
android:textStyle="bold"/span>
tools:text="0.7" />
<TextView
android:id="@ id/peso"/span>
android:layout_width="43dp"/span>
android:layout_height="27dp"/span>
android:layout_marginTop="1dp"/span>
android:gravity="end"/span>
android:textSize="20sp"/span>
android:textStyle="bold"/span>
tools:text="0.5" />
</LinearLayout>
<LinearLayout
android:layout_width="30dp"/span>
android:layout_height="match_parent"/span>
android:orientation="垂直">
<TextView
android:id="@ id/metros"/span>
android:layout_width="wrap_content"/span>
android:layout_height="22dp"/span>
android:layout_marginStart="5dp"/span>
android:layout_marginTop="3dp"/span>
android:text="@string/metros"/span>
android:textSize="20sp"/span>
android:textStyle="bold" />
<TextView
android:id="@ id/kilo"/span>
android:layout_width="wrap_content"/span>
android:layout_height="27dp"/span>
android:layout_marginStart="5dp"/span>
android:layout_marginTop="1dp"/span>
android:text="@string/kilos"/span>
android:textSize="20sp"/span>
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"/span>
android:layout_height="match_parent"/span>
android:layout_marginTop="1dp"/span>
android:orientation="horizontal">
<ImageView
android:id="@ id/tipodato"/span>
android:layout_width="40dp"/span>
android:layout_height="40dp"/span>
android:layout_marginStart="10dp"/span>
android:layout_marginTop="10dp"/span>
android:contentDescription="@string/contentDescrip"/span>
tools:src="@mipmap/tipoplanta" />
<ImageView
android:id="@ id/tipo2dato"/span>
android:layout_width="40dp"/span>
android:layout_height="40dp"/span>
android:layout_marginStart="8dp"/span>
android:layout_marginTop="10dp"/span>
android:contentDescription="@string/contentDescrip"/span>
tools:src="@mipmap/tipoveneno" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
android:layout_width="match_parent"/span>
android:layout_height="match_parent"/span>
android:orientation="vertical"
<LinearLayout
android:layout_width="match_parent"/span>
android:layout_height="match_parent"/span>
android:orientation="垂直">
<TextView
android:layout_width="wrap_content"/span>
android:layout_height="wrap_content"/span>
android:layout_marginStart="8dp"/span>
android:layout_marginTop="2dp"/span>
android:text="@string/nombre"/span>
android:textSize="15sp"/span>
android:textStyle="bold" />
<TextView
android:id="@ id/nombredato"/span>
android:layout_width="match_parent"。
android:layout_height="wrap_content"。
android:layout_marginStart="8dp"/span>
android:gravity="end"/span>
android:paddingEnd="5dp"/span>
android:textSize="18sp"/span>
android:textStyle="bold"/span>
tools:text="Bulbasaur" />
<TextView
android:layout_width="wrap_content"/span>
android:layout_height="wrap_content"/span>
android:layout_marginStart="8dp"/span>
android:layout_marginTop="7dp"/span>
android:paddingEnd="5dp"/span>
android:text="@string/hab"/span>
android:textSize="15sp"/span>
android:textStyle="bold" />
<TextView
android:id="@ id/habilidad"/span>
android:layout_width="match_parent"/span>
android:layout_height="wrap_content"。
android:layout_marginStart="8dp"/span>
android:autoSizeTextType="uniform"/span>
android:gravity="end"/span>
android:paddingEnd="5dp"/span>
android:textSize="17sp"/span>
android:textStyle="bold"/span>
tools:text="Espesura" />
<TextView
android:id="@ id/habilidad2"/span>
android:layout_width="match_parent"。
android:layout_height="wrap_content"。
android:layout_marginStart="8dp"/span>
android:autoSizeTextType="uniform"/span>
android:gravity="end"/span>
android:paddingEnd="5dp"/span>
android:textSize="17sp"/span>
android:textStyle="bold"/span>
tools:text="Espesura" />
<TextView
android:layout_width="wrap_content"/span>
android:layout_height="wrap_content"/span>
android:layout_marginStart="8dp"/span>
android:paddingEnd="5dp"/span>
android:text="@string/haboculta"/span>
android:textSize="15sp"/span>
android:textStyle="bold" />
<TextView
android:id="@ id/habilidadoculta"/span>
android:layout_width="match_parent"。
android:layout_height="wrap_content"。
android:layout_marginStart="8dp"/span>
android:gravity="end"/span>
android:paddingEnd="5dp"/span>
android:textSize="17sp"/span>
android:textStyle="bold"/span>
tools:text="Clorofila" />
<TextView
android:layout_width="wrap_content"/span>
android:layout_height="wrap_content"。
android:layout_marginStart="8dp"/span>
android:layout_marginTop="7dp"/span>
android:paddingEnd="5dp"/span>
android:text="@string/gruphuevo"/span>
android:textSize="15sp"/span>
android:textStyle="bold" />
<TextView
android:id="@ id/grupohuevo1"/span>
android:layout_width="match_parent"。
android:layout_height="wrap_content"。
android:layout_marginStart="8dp"/span>
android:gravity="end"/span>
android:paddingEnd="5dp"/span>
android:textSize="16sp"/span>
android:textStyle="bold"/span>
tools:text="Monstruo" />
<TextView
android:id="@ id/grupohuevo2"/span>
android:layout_width="match_parent"。
android:layout_height="wrap_content"。
android:layout_marginStart="8dp"/span>
android:gravity="end"/span>
android:paddingEnd="5dp"/span>
android:textSize="16sp"/span>
android:textStyle="bold"/span>
tools:text="Planta" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="326dp"/span>
android:layout_height="115dp"/span>
android:orientation="垂直">
<TextView
android:id="@ id/descripcion"/span>
android:layout_width="match_parent"。
android:layout_height="match_parent"/span>
android:layout_margin="5dp"/span>
android:textAlignment="center"/span>
android:textSize="17sp"/span>
android:textStyle="bold"/span>
tools:text="Lorem Ipsum只是印刷和排版行業的假文本。另一個可以占用的文本是... " />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="327dp"/span>
android:layout_height="120dp"/span>
android:orientation="horizontal"
android:layout_marginTop="5dp"/span>
android:layout_marginStart="40dp"/span>
android:layout_marginEnd="50dp">
<LinearLayout
android:layout_width="125dp"/span>
android:layout_height="wrap_content"/span>
android:orientation="垂直">
<按鈕
android:id="@ id/STATS"/span>
android:layout_width="115dp"/span>
android:layout_height="50dp"/span>
android:text="@string/stats"/span>
android:textSize="16sp"/span>
android:layout_marginTop="11dp"/span>
tools:ignore="TouchTargetSizeCheck" />
<按鈕
android:id="@ id/MOVES"/span>
android:layout_width="115dp"/span>
android:layout_height="50dp"/span>
android:backgroundTint="#FDD835"/span>
android:text="@string/moves"/span>
android:textColor="@color/black"/span>
android:textSize="16sp"/span>
tools:ignore="TextContrastCheck,TouchTargetSizeCheck" />
</LinearLayout>
<ImageButton
android:id="@ id/vozPokemon"/span>
android:layout_width="70dp"/span>
android:layout_height="70dp"/span>
android:layout_marginTop="25dp"/span>
android:layout_marginStart="5dp"/span>
android:layout_marginEnd="35dp"/span>
android:layout_marginBottom="10dp"/span>
android:background="@null"/span>
android:contentDescription="@string/contentDescrip"/span>
android:scaleType="fitXY"/span>
android:src="@mipmap/botonaudio"。
tools:ignore="SpeakableTextPresentCheck,DuplicateSpeakableTextCheck" />
<com.gauravk.audiovisualizer.visualizer.WaveVisualizer
xmlns:custom="http://schemas.android.com/apk/res-auto"。
android:id="@ id/wave"/span>
android:layout_width="72dp"/span>
android:layout_height="55dp"/span>
android:layout_marginTop="34dp"/span>
android:layout_marginEnd="30dp"/span>
custom:avDensity="0.07"。
custom:avType="outline"/span>
custom:avColor="#FDD835"/span>
custom:avSpeed="fast"/span>
custom:avWidth="2dp"/span>
custom:avGravity="bottom"/span>
tools:ignore="MissingClass" />
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"?
xmlns:tools="http://schemas.android.com/tools"。
android:layout_width="match_parent"/span>
android:layout_height="match_parent"/span>
android:orientation="vertical"
tools:context=".StatsFragment">
<LinearLayout
android:layout_width="wrap_content"。
android:layout_height="wrap_content"/span>
android:orientation="horizontal">
<TextView
android:layout_width="260dp"/span>
android:layout_height="50dp"/span>
android:layout_marginStart="20dp"/span>
android:text="@string/tituloestadisticas"/span>
android:textAlignment="textStart"/span>
android:textSize="30sp"/span>
android:textStyle="italic|bold"。
android:background="@color/white" />
<ImageButton
android:id="@ id/btnCerrar"/span>
android:layout_width="50dp"/span>
android:layout_height="50dp"/span>
android:background="@null"/span>
android:contentDescription="@string/contentDescrip"/span>
android:src="@drawable/ic_baseline_close_24"。
tools:ignore="DuplicateSpeakableTextCheck,ImageContrastCheck" />
</LinearLayout>
<LinearLayout
android:layout_width="330dp"/span>
android:layout_height="wrap_content"。
android:background="@color/white"/span>
android:orientation="horizontal""4dp">
<LinearLayout
android:layout_width="wrap_content"/span>
android:layout_height="match_parent"/span>
android:orientation="vertical"
android:paddingStart="23dp"/span>
>
<TextView
android:layout_width="match_parent"/span>
android:layout_height="wrap_content"/span>
android:text="@string/ATK"/span>
android:textAlignment="center"/span>
android:textSize="15sp"/span>
android:layout_marginTop="70dp"/span>
android:textStyle="bold|italic" />
<TextView
android:id="@ id/STAT_ATK"/span>
android:layout_width="match_parent"。
android:layout_height="wrap_content"。
android:textAlignment="center"/span>
android:textSize="15sp"/span>
android:textStyle="bold|italic"。
tools:text="@string/ATK" />
<TextView
android:layout_width="match_parent"/span>
android:layout_height="wrap_content"。
android:layout_marginTop="75dp"/span>
android:text="@string/DEF"/span>
android:textAlignment="center"/span>
android:textSize="15sp"/span>
android:textStyle="bold|italic" />
<TextView
android:id="@ id/STAT_DEF"/span>
android:layout_width="match_parent"。
android:layout_height="wrap_content"。
android:text="@string/DEF"/span>
android:textAlignment="center"/span>
android:textSize="15sp"/span>
android:textStyle="bold|italic" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"。
android:layout_height="match_parent"/span>
android:orientation="垂直">
<TextView
android:layout_width="match_parent"/span>
android:layout_height="wrap_content"/span>
android:text="@string/HP"/span>
android:textAlignment="center"/span>
android:textSize="15sp"/span>
android:textStyle="bold|italic" />
<TextView
android:id="@ id/STAT_HP"/span>
android:layout_width="match_parent"。
android:layout_height="wrap_content"。
android:textAlignment="center"/span>
android:textSize="15sp"/span>
android:textStyle="bold|italic"/span>
android:text="@string/HP" />
<com.github.mikephil.charting.charts.RadarChart
android:id="@ id/graficoRadar"/span>
android:layout_width="206dp"/span>
android:layout_height="215dp"/span>
android:background="@color/white"/span>
android:backgroundTint="@color/white" />
<TextView
android:layout_width="match_parent"/span>
android:layout_height="wrap_content"/span>
android:text="@string/SPD"/span>
android:textAlignment="center"/span>
android:textSize="15sp"/span>
android:textStyle="bold|italic" />
<TextView
android:id="@ id/STAT_SPD"/span>
android:layout_width="match_parent"。
android:layout_height="47dp"/span>
android:text="@string/SPD"/span>
android:textAlignment="center"/span>
android:textSize="15sp"/span>
android:textStyle="bold|italic" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"。
android:layout_height="match_parent"/span>
android:orientation="vertical""20dp">
<TextView
android:layout_width="match_parent"/span>
android:layout_height="wrap_content"/span>
android:text="@string/SP_ATK"。
android:layout_marginTop="70dp"/span>
android:textSize="15sp"。
android:textStyle="bold|italic" />
<TextView
android:id="@ id/STAT_SPATK"/span>
android:layout_width="match_parent"。
android:layout_height="wrap_content"。
android:text="@string/SP_ATK"。
android:textSize="15sp"/span>
android:textStyle="bold|italic" />
<TextView
android:layout_width="match_parent"/span>
android:layout_height="wrap_content"。
android:layout_marginTop="75dp"/span>
android:text="@string/SP_DEF"/span>
android:textSize="15sp"/span>
android:textStyle="bold|italic" />
<TextView
android:id="@ id/STAT_SPDEF"/span>
android:layout_width="match_parent"。
android:layout_height="wrap_content"/span>
android:textSize="15sp"/span>
android:textStyle="bold|italic"/span>
android:text="@string/SP_DEF" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
binding.btnCerrar.setOnClickListener {
...
activity.supportFragmentManager?.beginTransaction()?.hide(this)?.commit() //將此替換為:
findNavController().navigateUp()
}
activity.supportFragmentManager?.opBackStack()
