Newbie question about Android Studio and button not syncing in main activity

后端 未结 1 1512
感情败类
感情败类 2021-01-29 09:16

Here is the tutorial

https://www.youtube.com/watch?time_continue=289&v=OGfZpfn-dGI

In my android studio it doesn\'t recognize the button iv\'e name them

相关标签:
1条回答
  • 2021-01-29 10:03

    We're missing a lot of context here that would probably help us help you.

    A few things first though: - The android:id property in your XML layout is how you name the View in question. This is most often how you will reference the View in code. - The android:text property is the user visible text on views like TextView. - In order for top_button to refer to your desired View in your XML layout file, it needs to be bound in code. There's a couple of normal ways of doing it findViewById() and data-binding.

    I'm going to assume, for now, that the last step is what you are missing (it seems the most likely culprit at this point)... Here's a few ways to bind it:

    Method 1: when using an Activity class

    If you're binding top_button to your View from an Activity class, this should work:

    private lateinit var top_button // replace View here with your widget's type
    
    fun onCreate(...) {
        super.onCreate(...)
        setContentView(R.layout.<i>your_layout_file_name_here</i>)
        top_button = findViewById(R.id.top_button)
        ...
    }
    

    Method 2: when using a Fragment class

    If you're binding top_button to your View from a Fragment class, it's more like this:

    private lateinit var top_button: View // replace View here with your widget's type
    
    fun onCreateView(...): View {
        val rootView = layoutInflater.inflate(R.layout.<i>your_layout_file_name_here</i>)
        top_button = rootView.findViewById(R.id.top_button)
        ...
        return rootView
    }
    

    Method 3: when using data-binding

    I prefer this method myself, but you should Google how to setup data-binding in Android as you'll need changes in your build.gradle and all.

    • First, change your XML layout to be:
    <layout>
    
    <!-- your existing layout XML here -->
    
    </layout>
    

    Then in your Activity/Fragment, let's say your XML layout file is named activity_my_cool_screen.xml, you can do:

    val binding = ActivityMyCoolScreenBinding.inflate(getLayoutInflater())
    binding.topButton.setOnClickListener(...)
    

    Notice here that the ActivityMyCoolScreenBinding class is auto-generated for you. If it turns red at first, then first verify you've accurately setup data-binding in your project, then if that's good to go, make sure to import the ActivityMyCoolScreenBinding class. If you change your XML layout's filename, then the ActivityMyCoolScreenBinding class name will change to match automatically. But, I'd recommend if you do change the name, that you use Android Studio's refactoring/renaming tools as it'll search your codebase and update it everywhere. Otherwise, you have to do it by hand (doable, but potentially tedious and error prone).

    Good luck!

    0 讨论(0)
提交回复
热议问题