簡體   English   中英

Android 視圖綁定。 如何在 Basic Activity/Fragment 中實現綁定?

[英]Android view binding. How implement binding in Basic Activity/Fragment?

我正在處理視圖綁定。 請指導我是否可以在基本活動中派生綁定邏輯以及如何創建它? 謝謝。 我正在嘗試這樣做,但這段代碼無法編譯。

public class BasicActivity<Т extends ViewBinding> extends AppCompatActivity {

    private Т binding;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        binding = T.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
    }
}

你只能用我認為的抽象方法來做到這一點。 我使用類似下面的東西。

abstract class BaseActivity<V : ViewBinding> : AppCompatActivity() {
    protected open var binding: V? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        makeFullScreen()
        setContentView(getInflatedLayout(layoutInflater))
        setup()
        SharePreferenceUtil.setListenerFlutter(this)
    }

    override fun onDestroy() {
        super.onDestroy()
        this.binding = null
        SharePreferenceUtil.removeListenerFlutter(this)
    }


    //internal functions
    private fun getInflatedLayout(inflater: LayoutInflater): View {
        this.binding = setBinding(inflater)


        return binding?.root
                ?: error("Please add your inflated binding class instance")
    }

    //abstract functions
    abstract fun setBinding(layoutInflater: LayoutInflater): V

    abstract fun setup()
}

如果你想要片段摘要,你可以像下面這樣

abstract class BaseFragment<T : ViewBinding, A : Any> : Fragment() {
    protected var handler: A? = null //It's base activity

    protected open var binding: T? = null

    override fun onAttach(context: Context) {
        super.onAttach(context)
        @Suppress("UNCHECKED_CAST")
        this.handler = this.activity as? A
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        this.binding = this.setBinding(inflater,container)
        return binding!!.root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        binding = null
    }
    abstract fun setBinding(inflater: LayoutInflater, container: ViewGroup?): T
}

然后在片段中設置綁定;

override fun setBinding(inflater: LayoutInflater, container: ViewGroup?): ActivityMainBinding = ActivityMainBinding.inflate(inflater, container, false)

您可以在基本活動中使用綁定邏輯

您可以使用 DataBindingUtil.setContentView() 並擁有一個抽象的 function 來獲取布局 ID。

protected T binding;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = DataBindingUtil.setContentView(this, getLayoutId())

}

public abstract int getLayoutId();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM