Unresolved reference for synthetic view when layout is in library module

前端 未结 10 2088
醉梦人生
醉梦人生 2020-12-12 21:37

using Kotlin 1.20.20 (not that it matters, older versions behaves the same)

When layout is in separate library module Android Studio has no problem finding and refer

10条回答
  •  天涯浪人
    2020-12-12 21:52

    As mentioned in the comment by @cesards above this is an on going issue with the Kotlin Android Extentions. And it is not solved as of today.


    Good: Use Custom Views

    My primary suggestion is encapsulating the view and the relevant behavior as a custom view and instead of including it via tag, use it directly in your layout as .

    This will work no matter your view class is in another module or not.


    Bad and Ugly: Id Collision Workaround

    However I found a hacky workaround if you only want to get one reference from the included view.

    Follow these steps to use kotlin synthetic imports for the layouts included from other modules:

    1. Give an id to the view you want to get reference of in the included xml file.
    2. Give the same id to the include tag in the including xml file.
    3. Now synthetic import the view (id) from the including layout (not from the included)

    I'm not really sure how and why this works but it's a very fragile and dirty way of reusing layouts.

    Example:

    Your including layout (fragment_example.xml)

    
    

    Your included layout (example_layout.xml)

    
    
        
    
    
    

    Your fragment class (ExampleFragment.kt)

    import kotlinx.android.synthetic.main.fragment_example.exampleView
    
    // Do not import the exampleView through example_layout.exampleView
    
    class ExampleFragment : Fragment() {
        // Do something with imported exampleView
    }
    

提交回复
热议问题