Android视图绑定。如何在基本活动/碎片中实现绑定?

6

我正在使用视图绑定功能。请指导我如何在基本活动中派生绑定逻辑,以及如何创建它?谢谢。我尝试这样做,但是这段代码无法编译。

public class BasicActivityextends 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());
    }
}

你是否使用了正确的 onCreate() 回调函数? - Arka Prava Basu
只需使用 onCreate(Bundle savedInstanceState) 并尝试。 - Arka Prava Basu
这个回答解决了你的问题吗?如何在抽象基类中使用ViewBinding - Chetan Gupta
嗨,我写了一篇博客文章,完全解释了视图绑定,并编写了“活动和片段的基类”,请查看Androidbites|ViewBinding - Chetan Gupta
2个回答

5
我认为你只能使用抽象方法来完成这个任务。我使用类似下面的代码实现:
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)

0

在基本活动中,您可以拥有绑定逻辑。

您可以使用DataBindingUtil.setContentView()并拥有一个抽象函数来获取布局ID。

protected T binding;

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

}

public abstract int getLayoutId();

3
请注意问题。ViewBinding与DataBinding不同! - Hampel Előd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接