I create kotlin app. Very simple : a slasp screen + custom spinner with adapter, imageView and button. All was working with the custom spinner but when I had the button and the imageView, now the app is closing after the splash screen. If you see something wrong ?
Main :
package fr.**************.*************
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
supportActionBar?.hide()
Handler().postDelayed({
val intent = Intent(this@MainActivity, HomeActivity::class.java)
startActivity(intent)
finish()
},4000)
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="@drawable/background">
</androidx.constraintlayout.widget.ConstraintLayout>
Home :
package fr.**************.************
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.ImageView
import kotlinx.android.synthetic.main.activity_home.*
import java.util.*
class HomeActivity : AppCompatActivity() {
lateinit var diceImage: ImageView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
/*
********************Image*******************
*/
val button: Button = findViewById(R.id.roll_Button)
button.text = getString(R.string.Divination)
button.setOnClickListener {
rollDice()
}
diceImage = findViewById(R.id.dice_image)
/*
*******************spinner*************
*/
setupCustomSpinner()
}
private fun setupCustomSpinner() {
val adapter = CountryArrayAdapter( this, Countries.list!!)
customSpinner.adapter = adapter
/*
************spinner****************
*/
}
private fun rollDice() {
val drawableResource = when (Random().nextInt(5) + 1) {
1 -> R.drawable.d1
2 -> R.drawable.d2
3 -> R.drawable.d3
4 -> R.drawable.d4
else -> R.drawable.d5
}
diceImage.setImageResource(drawableResource)
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".HomeActivity">
<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/customSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="150dp"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
<ImageView
android:id="@+id/dice_image"
android:layout_width="250dp"
android:layout_height="200dp"
android:layout_marginStart="80dp"
android:layout_marginLeft="80dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="81dp"
android:layout_marginRight="81dp"
android:layout_marginBottom="@+id/roll_Button"
android:importantForAccessibility="no"
app:layout_constraintBottom_toBottomOf="@+id/roll_Button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:scaleType="centerInside"
app:layout_constraintTop_toBottomOf="@+id/customSpinner"
tools:srcCompat="R.drawable.d1" />
<Button
android:id="@+id/roll_Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="25dp"
android:layout_marginLeft="25dp"
android:layout_marginTop="70dp"
android:fontFamily="@font/architects_daughter"
android:text="@string/divination"
android:textSize="32sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/dice_image"
app:layout_constraintTop_toBottomOf="@+id/dice_image"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
Spinner :
package fr.*********************.*****************
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.content.Context
import kotlinx.android.synthetic.main.spinner_item.view.*
class CountryArrayAdapter(context: Context, countrylist: List<Country>) : ArrayAdapter<Country>(context, 0, countrylist) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
return initView(position, convertView, parent)
}
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
return initView(position, convertView, parent)
}
private fun initView(position: Int, convertView: View?, parent: ViewGroup): View {
val country = getItem(position)
val view = LayoutInflater.from(context).inflate(R.layout.spinner_item, parent, false)
view.spinnerImage.setImageResource(country!!.image)
view.spinnerName.text = country.name
return view
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="vertical">
<ImageView
android:id="@+id/spinnerImage"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:adjustViewBounds="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/icon" />
<TextView
android:id="@+id/spinnerName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:text="Choose your Crypto"
android:textColor="#353434"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/spinnerImage"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
and ...
package fr.***************.****************
import java.util.*
data class Country(val image: Int, val name: String)
object Countries {
private val images = intArrayOf(
R.drawable.icon,
R.drawable.inch,
R.drawable.aave,
R.drawable.ada,
R.drawable.algo,
R.drawable.amp,
R.drawable.ankr,
R.drawable.ape,
R.drawable.ar,
R.drawable.atom,
R.drawable.avax,
R.drawable.axs,
R.drawable.bat,
R.drawable.bch,
R.drawable.bnb,
R.drawable.bora,
R.drawable.bsv,
R.drawable.btc,
R.drawable.btg,
R.drawable.btt,
R.drawable.busd,
R.drawable.cake,
R.drawable.celo,
R.drawable.chz,
R.drawable.comp,
R.drawable.cro,
R.drawable.crv,
R.drawable.cvx,
R.drawable.dai,
R.drawable.dash,
R.drawable.dcr,
R.drawable.doge,
R.drawable.dot,
R.drawable.egld,
R.drawable.enj,
R.drawable.eos,
R.drawable.etc,
R.drawable.eth,
R.drawable.fei,
R.drawable.fil,
R.drawable.flow,
R.drawable.ftm,
R.drawable.ftt,
R.drawable.gala,
R.drawable.glm,
R.drawable.glmr,
R.drawable.gmt,
R.drawable.gno,
R.drawable.grt,
R.drawable.gt,
R.drawable.hbar,
R.drawable.hnt,
R.drawable.hot,
R.drawable.ht,
R.drawable.icp,
R.drawable.icx,
R.drawable.iost,
R.drawable.iotex,
R.drawable.iotx,
R.drawable.jst,
R.drawable.kava,
R.drawable.kcs,
R.drawable.klay,
R.drawable.knc,
R.drawable.ksm,
R.drawable.ldo,
R.drawable.leo,
R.drawable.link,
R.drawable.lrc,
R.drawable.ltc,
R.drawable.mana,
R.drawable.matic,
R.drawable.mina,
R.drawable.miota,
R.drawable.mkr,
R.drawable.near,
R.drawable.neo,
R.drawable.nexo,
R.drawable.okb,
R.drawable.omg,
R.drawable.one,
R.drawable.paxg,
R.drawable.qnt,
R.drawable.qtun,
R.drawable.rose,
R.drawable.rune,
R.drawable.rvn,
R.drawable.sand,
R.drawable.shib,
R.drawable.snx,
R.drawable.sol,
R.drawable.srm,
R.drawable.stx,
R.drawable.tfuel,
R.drawable.theta,
R.drawable.trx,
R.drawable.tusd,
R.drawable.twt,
R.drawable.uni,
R.drawable.usdc,
R.drawable.usdd,
R.drawable.usdn,
R.drawable.usdp,
R.drawable.usdt,
R.drawable.ustc,
R.drawable.vet,
R.drawable.waves,
R.drawable.wbtc,
R.drawable.xdc,
R.drawable.xec,
R.drawable.xem,
R.drawable.xlm,
R.drawable.xmr,
R.drawable.xrp,
R.drawable.xtz,
R.drawable.xym,
R.drawable.zec,
R.drawable.zil,
R.drawable.zrx
)
private val countries = arrayOf(
"Choose your Crypto",
"1INCH - 1inch Network",
"AAVE - Aave",
"ADA - Cardano",
"ALGO -Algorand",
"AMP - Amp",
"ANKR - Ankr",
"APE - ApeCoin",
"AR - Arweave",
"ATOM - Cosmos",
"AVAX - Avalanche",
"AXS - Axie Infinity",
"BAT - Basic Attention Token",
"BCH - Bitcoin Cash",
"BNB - BNB",
"BORA - BORA",
"BSV - Bitcoin SV",
"BTC - Bitcoin",
"BTG - Bitcoin Gold",
"BTT - BitTorrent-New",
"BUSD - Binance USD",
"CAKE - PancakeSwap",
"CELO - Celo",
"CHZ - Chiliz",
"COMP - Compound",
"CRO - Cronos",
"CRV - Curve DAO Token",
"CVX - Convex Finance",
"DAI - Dai",
"DASH - Dash",
"DCR - Decred",
"DOGE - Dogecoin",
"DOT - Polkadot",
"EGLD - Elrond",
"ENJ - Enjin Coin",
"EOS - EOS",
"ETC - Ethereum Classic",
"ETH - Ethereum",
"FEI - Fei USD",
"FIL - Filecoin",
"FLOW - Flow",
"FTM - Fantom",
"FTT - FTX Token",
"GALA - Gala",
"GLM - Golem",
"GLMR - Moombean",
"GMT - STEPN",
"GNO - Gnosis",
"GRT - The Graph",
"GT - GateToken",
"HBAR - Hedera",
"HNT - Helium",
"HOT - Holo",
"HT - Huobi Token",
"ICP - Internet Computer",
"ICX - ICON",
"IOST - IOST",
"IOTX - IoTeX",
"JST - JUST",
"KAVA - Kava",
"KCS - KuCoin Token",
"KDA - Kadena",
"KLAY - Klaytn",
"KNC - Kyber Network Crystal V2",
"KSM - Kusama",
"LDO - Lido DAO",
"LEO - UNUS SED LEO",
"LINK - Chainlink",
"LRC - Loopring",
"LTC - Litecoin",
"MANA - Decentraland",
"MATIC - Polygon",
"MINA - Mina",
"MIOTA - IOTA",
"MKR - Maker",
"NEAR - NEAR Protocol",
"NEO - Neo",
"NEXO - Nexo",
"OKB - OKB",
"OMG - OMG Network",
"ONE - Harmony",
"PAXG - Pax Gold",
"QNT - Quant",
"QTUM - Qtum",
"ROSE - Oasis Network",
"RUNE - THORChain",
"RVN - Ravencoin",
"SAND - The Sandbox",
"SHIB - Shiba Inu",
"SNX - Synthetix",
"SOL - Solana",
"SRM - Serum",
"STX - Stacks",
"TFUEL - Theta Fuel",
"THETA - Theta Network",
"TRX - TRON",
"TUSD - TrueUSD",
"TWT - Trust Wallet Token",
"UNI - Uniswap",
"USDC - USD Coin",
"USDD - USDD",
"USDD - USDD",
"USDP - Pax Dollar",
"USDT - Tether",
"USTC - TerraClassicUSD",
"VET - VeChain",
"WAVES - Waves",
"WBTC - Wrapped Bitcoin",
"XDC - XDC Network",
"XEC - eCash",
"XEM - NEM",
"XLM - Stellar",
"XMR - Monero",
"XRP - XRP",
"XTZ - Tezos",
"XYM - Symbol",
"ZEC - Zcash",
"ZIL - Zilliqa",
"ZRX - Ox"
)
var list: ArrayList<Country>? = null
get() {
if (field != null)
return field
field = ArrayList()
for (i in images.indices) {
val imageId = images[i]
val countryName = countries[i]
val country = Country(imageId, countryName)
field!!.add(country)
}
return field
}
}
Thank's to help me ;)