欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中dataBinding使用的簡(jiǎn)單封裝

 更新時(shí)間:2023年06月09日 09:44:50   作者:zhang106209  
前面一段時(shí)間學(xué)習(xí)了一下Android中的DataBinding,但是只是很簡(jiǎn)單地實(shí)現(xiàn)了一下,DataBinding中最強(qiáng)大的地方還沒(méi)有認(rèn)真地學(xué)習(xí)過(guò),有很多地方還不理解,下面這篇文章主要給大家介紹了關(guān)于Android中dataBinding使用的簡(jiǎn)單封裝,需要的朋友可以參考下

一、簡(jiǎn)介

本文是databinding使用的簡(jiǎn)單封裝,主要是在基類(lèi)BaseActivity和BaseFragment中

二、具體步驟

1.在build.gradle中開(kāi)啟databinding

dataBinding { enabled = true }

2.在BaseActivity的封裝,主要是通過(guò)反射的方式獲取。如下

package com.zw.databindingdemo.java;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.ViewDataBinding;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
/**
 * 描述:
 * @author: zw
 * @time: 2023/5/22 17:33
 */
public abstract class BaseActivity<VB extends ViewDataBinding> extends AppCompatActivity {
    public VB mBinding;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        createBinding();
    }
    private void createBinding() {
        Class<VB> vbClass = getVbClass();
        try {
            if (vbClass == null) {
                return;
            }
            Method method = vbClass.getMethod("inflate", LayoutInflater.class);
            mBinding = (VB) method.invoke(null, getLayoutInflater());
            setContentView(mBinding.getRoot());
        } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    private Class<VB> getVbClass() {
        ParameterizedType parameterizedType = (ParameterizedType) this.getClass().getGenericSuperclass();
        if (parameterizedType == null) {
            return null;
        }
        Class<VB> vbClass = (Class<VB>) parameterizedType.getActualTypeArguments()[0];
        return vbClass;
    }
}

3.在Activity中使用如下

package com.zw.databindingdemo.java;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.zw.databindingdemo.databinding.ActivityTestBinding;
/**
 * 描述:
 * @author: zw
 * @time: 2023/5/22 17:33
 */
public class TestActivity extends BaseActivity<ActivityTestBinding> {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding.tvName.setText("測(cè)試 java Activity");
        mBinding.btnGo.setOnClickListener(v -> {
            initFragment();
        });
    }
    private void initFragment() {
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(mBinding.frameLayout.getId(), new TestFragment());
        ft.commit();
    }
}

4.在BaseFragment的封裝

package com.zw.databindingdemo.java;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.ViewDataBinding;
import androidx.fragment.app.Fragment;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
/**
 * 描述:
 * @author: zw
 * @time: 2023/5/22 17:33
 */
public abstract class BaseFragment<VB extends ViewDataBinding> extends Fragment {
    public VB mBinding;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        createBinding(inflater, container);
        return mBinding.getRoot();
    }
    private void createBinding(LayoutInflater inflater, ViewGroup container) {
        Class<VB> vbClass = getVbClass();
        try {
            if (vbClass == null) {
                return;
            }
         /*   Method method = vbClass.getMethod("inflate", LayoutInflater.class, ViewGroup.class, Boolean.class);*/
            Method method = vbClass.getMethod("inflate", LayoutInflater.class);
            mBinding = (VB) method.invoke(null, inflater);
        } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    private Class<VB> getVbClass() {
        ParameterizedType parameterizedType = (ParameterizedType) this.getClass().getGenericSuperclass();
        if (parameterizedType == null) {
            return null;
        }
        return (Class<VB>) parameterizedType.getActualTypeArguments()[0];
    }
}

5.在Fragment的使用如下

package com.zw.databindingdemo.java;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.zw.databindingdemo.databinding.FragmentTestBinding;
/**
 * 描述:
 * @author: zw
 * @time: 2023/5/22 17:33
 */
public class TestFragment extends BaseFragment<FragmentTestBinding> {
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mBinding.tvName.setText("測(cè)試 java Fragment");
    }
}

6.Kotlin 版本

 package com.zw.databindingdemo.kotlin
import android.os.Bundle
import android.view.LayoutInflater
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.ViewDataBinding
import java.lang.reflect.ParameterizedType
/**
 * 描述:
 * @author: zw
 * @time: 2023/5/22 17:33
 */
abstract class BaseActivityKotlin<VB : ViewDataBinding> : AppCompatActivity() {
    public lateinit var mBinding: VB
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mBinding = createBinding()
        setContentView(mBinding.root)
    }
    private fun createBinding(): VB {
        val vbClass = getVBClass()
        val method = vbClass.getMethod("inflate", LayoutInflater::class.java)
        return method.invoke(null, layoutInflater) as VB
    }
    @Suppress("UNCHECKED_CAST")
    private fun getVBClass(): Class<VB> {
        val type = javaClass.genericSuperclass as ParameterizedType
        return type.actualTypeArguments[0] as Class<VB>
    }
}
package com.zw.databindingdemo.kotlin
import android.os.Bundle
import com.zw.databindingdemo.databinding.ActivityTestKotlinBinding
/**
 * 描述:
 * @author: zw
 * @time: 2023/5/22 17:33
 */
class TestActivityKotlin: BaseActivityKotlin<ActivityTestKotlinBinding>() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mBinding.tvName.text = "測(cè)試 Kotlin Activity"
        mBinding.btnGo.setOnClickListener { initFragment() }
    }
    private fun initFragment() {
        val fm = supportFragmentManager
        val ft = fm.beginTransaction()
        ft.replace(mBinding.frameLayout.id, TestFragmentKotlin())
        ft.commit()
    }
}
package com.zw.databindingdemo.kotlin
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.ViewDataBinding
import androidx.fragment.app.Fragment
import java.lang.reflect.ParameterizedType
/**
 * 描述:
 * @author: zw
 * @time: 2023/5/22 17:33
 */
abstract class BaseFragmentKotlin<VB : ViewDataBinding> : Fragment() {
    public lateinit var mBinding: VB
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        mBinding = createBinding(inflater, container)
        return mBinding.root
    }
    private fun createBinding(inflater: LayoutInflater, container: ViewGroup?): VB {
        val vbClass = getVBClass()
        val method = vbClass.getMethod(
            "inflate",
            LayoutInflater::class.java,
            ViewGroup::class.java,
            Boolean::class.java
        )
        return method.invoke(null, inflater, container, false) as VB
    }
    @Suppress("UNCHECKED_CAST")
    private fun getVBClass(): Class<VB> {
        val type = javaClass.genericSuperclass as ParameterizedType
        return type.actualTypeArguments[0] as Class<VB>
    }
}
package com.zw.databindingdemo.kotlin
import android.os.Bundle
import android.view.View
import com.zw.databindingdemo.databinding.FragmentTestKotlinBinding
/**
 * 描述:
 * @author: zw
 * @time: 2023/5/22 17:33
 */
class TestFragmentKotlin : BaseFragmentKotlin<FragmentTestKotlinBinding>() {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        mBinding.tvName.text = "測(cè)試 Kotlin Fragment"
    }
}

總結(jié)

到此這篇關(guān)于Android中dataBinding使用的簡(jiǎn)單封裝的文章就介紹到這了,更多相關(guān)Android dataBinding封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • flutter封裝單選點(diǎn)擊菜單工具欄組件

    flutter封裝單選點(diǎn)擊菜單工具欄組件

    這篇文章主要介紹了flutter封裝單選點(diǎn)擊菜單工具欄組件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Android畢業(yè)設(shè)計(jì)記事本APP

    Android畢業(yè)設(shè)計(jì)記事本APP

    這篇文章主要介紹了一個(gè)Android畢業(yè)設(shè)計(jì)記事本APP,它是一款輕量級(jí)的便簽工具,使用Java語(yǔ)言開(kāi)發(fā),風(fēng)格簡(jiǎn)練,可實(shí)現(xiàn)便簽的添加、刪除、修改、查看功能
    2021-08-08
  • Android中 自定義數(shù)據(jù)綁定適配器BaseAdapter的方法

    Android中 自定義數(shù)據(jù)綁定適配器BaseAdapter的方法

    本篇文章小編為大家介紹,Android中 自定義數(shù)據(jù)綁定適配器BaseAdapter的方法。需要的朋友參考下
    2013-04-04
  • android實(shí)現(xiàn)音樂(lè)播放器進(jìn)度條效果

    android實(shí)現(xiàn)音樂(lè)播放器進(jìn)度條效果

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)音樂(lè)播放器進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • android驗(yàn)證郵箱輸入是否合法

    android驗(yàn)證郵箱輸入是否合法

    這篇文章主要為大家詳細(xì)介紹了android驗(yàn)證郵箱輸入是否合法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Android圓形頭像拍照后“無(wú)法加載此圖片”的問(wèn)題解決方法(適配Android7.0)

    Android圓形頭像拍照后“無(wú)法加載此圖片”的問(wèn)題解決方法(適配Android7.0)

    這篇文章主要介紹了Android圓形頭像拍照后“無(wú)法加載此圖片”的問(wèn)題解決方法(適配Android7.0) ,需要的朋友可以參考下
    2017-10-10
  • 學(xué)習(xí)使用Android Chronometer計(jì)時(shí)器

    學(xué)習(xí)使用Android Chronometer計(jì)時(shí)器

    Chronometer是一個(gè)簡(jiǎn)單的計(jì)時(shí)器,你可以給它一個(gè)開(kāi)始時(shí)間,并以計(jì)時(shí),或者如果你不給它一個(gè)開(kāi)始時(shí)間,它將會(huì)使用你的時(shí)間通話(huà)開(kāi)始,這篇文章主要幫助大家學(xué)習(xí)掌握使用Android Chronometer計(jì)時(shí)器,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Android Studio配置本地SDK的方法

    Android Studio配置本地SDK的方法

    這篇文章主要介紹了Android Studio配置本地SDK的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Android使用libgdx實(shí)現(xiàn)模擬方向鍵控制角色移動(dòng)的方法

    Android使用libgdx實(shí)現(xiàn)模擬方向鍵控制角色移動(dòng)的方法

    這篇文章主要介紹了Android使用libgdx實(shí)現(xiàn)模擬方向鍵控制角色移動(dòng)的方法,實(shí)例分析了Android中使用libgdx框架實(shí)現(xiàn)響應(yīng)方向鍵的技巧,適用于Android游戲開(kāi)發(fā)領(lǐng)域,需要的朋友可以參考下
    2015-12-12
  • Android列表點(diǎn)擊事件定義的一些思考

    Android列表點(diǎn)擊事件定義的一些思考

    大家好,本篇文章主要講的是Android列表點(diǎn)擊事件定義的一些思考,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽
    2021-12-12

最新評(píng)論