たとえばこんな具合に、あるクラスの内部クラスを DataBinding する Acitivty と XML レイアウトがあるとする。
import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil import com.tomoyashibata.classinclass.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main) binding.innerSomethingClass = SomethingClass.InnerSomethingClass() } }
<?xml version="1.0" encoding="utf-8"?> <layout 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"> <data> <variable name="innerSomethingClass" type="com.tomoyashibata.classinclass.SomethingClass.InnerSomethingClass" /> </data> <!-- something --> </layout>
ここで、SomethingClass
を subpackage
というパッケージに移動してみる。
Android Studio の移動機能を使うので、リファクタリングが自動で行われてパッケージ移動への追従が行われるはず。
今回は、XML レイアウトにある variable の type が com.tomoyashibata.classinclass.subpackage.SomethingClass.InnerSomethingClass
になることを期待するのだけれど、
<data> <variable name="innerViewModel" type="com.tomoyashibata.classinclass.subpackage.SomethingClass" /> </data>
実際はこのように内部クラスの部分が消滅してしまい InnerSomethingClass
の外部クラスにあたる SomethingClass
へと参照が置き換わってしまう。もちろん、このままではビルドは通らない。もし内部クラスを DataBinding している環境でパッケージ移動をするといった場合、ここを手動で直す必要がある。
Android Studio の問題ぽいので Issue を上げてみた。様子見。
References are broken when moving between packages when DataBinding is an inner class [136060073] - Visible to Public - Issue Tracker https://issuetracker.google.com/issues/136060073