Как использовать Kotlin Android Extensions и Databinding одновременно? - PullRequest
0 голосов
/ 01 июля 2018

Я хочу создать проект Android с Kotlin, поэтому я создаю его с помощью Kotlin и Databinding. В этом нет ничего плохого. Но когда я использую Kotlin Android Extensions или Butterknife, приложение, созданное мной из этого проекта, не может использоваться нормально.

Вот мой фрагмент класса

class MainFragment: Fragment() {

private var stock: StockQuote? = null

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
    val binding: FragmentMainBinding = DataBindingUtil.inflate(inflater!!, R.layout.fragment_main, container, false)
    binding.stock = stock
    search_et.setOnFocusChangeListener { v, hasFocus ->
        if(!hasFocus){
            val newStock = ScrapingUtil.getQuote(search_et?.text.toString())
            if(newStock != null){
                stock?.name = newStock.name
            }
        }
    }
    return binding.root
}

}

Сначала я попытался использовать Butterknife, но это не сработало, вид, который я хочу связать, будет нулевым. Затем я попытался использовать Kotlin Android Extensions, он выдал ошибку во время выполнения

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: cn.mister.stockcalculator, PID: 30010
              java.lang.RuntimeException: Unable to start activity ComponentInfo{cn.mister.stockcalculator/cn.mister.stockcalculator.MainActivity}: android.view.InflateException: Binary XML file line #10: Binary XML file line #10: Error inflating class fragment
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2736)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2807)
                  at android.app.ActivityThread.-wrap11(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1604)
                  at android.os.Handler.dispatchMessage(Handler.java:111)
                  at android.os.Looper.loop(Looper.java:191)
                  at android.app.ActivityThread.main(ActivityThread.java:6016)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:821)
               Caused by: android.view.InflateException: Binary XML file line #10: Binary XML file line #10: Error inflating class fragment
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
                  at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
                  at cn.mister.stockcalculator.MainActivity.onCreate(MainActivity.kt:10)
                  at android.app.Activity.performCreate(Activity.java:6370)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2689)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2807) 
                  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1604) 
                  at android.os.Handler.dispatchMessage(Handler.java:111) 
                  at android.os.Looper.loop(Looper.java:191) 
                  at android.app.ActivityThread.main(ActivityThread.java:6016) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:821) 
               Caused by: android.view.InflateException: Binary XML file line #10: Error inflating class fragment
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
                  at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                  at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) 
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
                  at cn.mister.stockcalculator.MainActivity.onCreate(MainActivity.kt:10) 
                  at android.app.Activity.performCreate(Activity.java:6370) 
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122) 
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2689) 
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2807) 
                  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1604) 
                  at android.os.Handler.dispatchMessage(Handler.java:111) 
                  at android.os.Looper.loop(Looper.java:191) 
                  at android.app.ActivityThread.main(ActivityThread.java:6016) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:821) 
               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.EditText.setOnFocusChangeListener(android.view.View$OnFocusChangeListener)' on a null object reference
                  at cn.mister.stockcalculator.MainFragment.onCreateView(MainFragment.kt:23)
                  at android.app.Fragment.performCreateView(Fragment.java:2236)
                  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:962)
                  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1139)
                  at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1241)
                  at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2236)
                  at android.app.FragmentController.onCreateView(FragmentController.java:98)
                  at android.app.Activity.onCreateView(Activity.java:5678)
                  at android.support.v4.app.BaseFragmentActivityApi14.onCreateView(BaseFragmentActivityApi14.java:41)
                  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:68)
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:754)

как я могу это исправить?

1 Ответ

0 голосов
/ 03 июля 2018

Я нашел ответ на Расширения и фрагменты Android Kotlin .

Привязка данных не имеет значения, вам необходимо получить прямой доступ к search_et в методе onViewCreated

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...