В основном приложение может работать, и все, пока я не вставил любой из кодов
clickableViews[i].setBackgroundResource(ant)
clickableViews[i].text = "cardback"
clickableViews[i].textSize = 0.0F
в течение 1 oop
for (i in 0..15){}
Я новичок в этом, поэтому, пожалуйста, дайте мне знать, где я сделал ошибка в моем коде и любая другая информация, которая вам нужна. Очень признателен!
.kt файл:
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import com.example.betaberry.databinding.FragmentGameBinding
import kotlinx.android.synthetic.main.fragment_game.*
import com.example.betaberry.R.drawable.*
class GameFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {
val binding = DataBindingUtil.inflate<FragmentGameBinding>(inflater,
R.layout.fragment_game,container,false)
val pictures: MutableList<Int> = mutableListOf(
ant, gab, meg, dam, dyl, wp, me, kek, ant, gab, meg, dam, dyl, wp, me, kek)
//These squares are buttons in an array
val clickableViews = arrayOf(
square1, square2, square3, square4, square5, square6, square7, square8,
square9, square10, square11, square12, square13, square14, square15, square16)
val cardBack = cardback
var clickCount = 0
var turnOver = false
var lastClicked = -1
pictures.shuffle()
for (i in 0..15){
clickableViews[i].setBackgroundResource(ant)
//if everything below this is removed (except "return binding.root"), the NullPointerException points to this line
clickableViews[i].text = "cardback"
clickableViews[i].textSize = 0.0F
clickableViews[i].setOnClickListener {
if (clickableViews[i].text == "cardback" && !turnOver) {
clickableViews[i].setBackgroundResource(pictures[i])
clickableViews[i].setText(pictures[i])
if (clickCount == 0) {
lastClicked = i
}
clickCount++
}
else if (clickableViews[i].text !in "cardback") {
clickableViews[i].setBackgroundResource(cardBack)
clickableViews[i].text = "cardback"
clickCount--
}
if (clickCount == 2) {
turnOver = true
if (clickableViews[i].text == clickableViews[lastClicked].text) {
clickableViews[i].isClickable = false
clickableViews[lastClicked].isClickable = false
turnOver = false
clickCount = 0
}
}
else if (clickCount == 0) {
turnOver = false
}
} //setOnClickListener end
} //for loop end
return binding.root
} //onCreateView end
} //GameFragment end
Ошибка Logcat:
2020-03-07 21:19:10.613 5547-5547/com.example.betaberry E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.betaberry, PID: 5547
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setBackgroundResource(int)' on a null object reference
at com.example.betaberry.GameFragment.onCreateView(GameFragment.kt:67)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
Большая часть кода, который я использовал, следует из этого видеоурока:
https://www.youtube.com/watch?v=BGvjScKcW1s