小编or_*_*vir的帖子

fillMaxSize 修改器与 Jetpack Compose 中的 VerticalScroll 结合使用时不起作用

我尝试查找此内容,但找不到任何相关内容。

我想Column在垂直滚动的内部有一个“全尺寸” Box,但这种组合似乎不起作用。当我将verticalScroll(rememberScrollState())修饰符添加到 时Box,它似乎“禁用”了fillMaxSize()的修饰符Column

以下代码无法预期工作:

MyTheme {
        Box(
            modifier = Modifier
                .fillMaxSize()
                .border(2.dp, Color.Green) //for visual effect only
                .verticalScroll(rememberScrollState())
        ) {
            Column(
                modifier = Modifier
                    .fillMaxSize()
                    .padding(2.dp)
                    .border(2.dp, Color.Red) //for visual effect only
            ) {
               //some content
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

预期结果:BoxColumn绿色和红色边框)填满整个屏幕。

实际结果: Box填满屏幕,但Column不填满高度

verticalScroll()但是,如果我从 中删除修饰符Box,我会得到预期的结果:

MyTheme {
        Box(
            modifier = Modifier
                .fillMaxSize()
                .border(2.dp, Color.Green) //for visual effect …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose

23
推荐指数
3
解决办法
2万
查看次数

可能替代静态内部类以防止android/java中的内存泄漏?

最近我一直在研究java/android中的内存泄漏,几乎无处不在,它说我应该使用带有弱引用的静态内部类而不是匿名类.
所以,在我的Android应用程序中,我开始这样做,但很快就厌倦了它,因为它是很多样板代码...我认为有一个替代解决方案,我更喜欢使用,但我不确定它是在防止内存泄漏方面,静态内部类的有效替代方法.正如我之前所说,我还没有看到其他任何地方建议的解决方案(都说使用静态内部类)所以这就是为什么我不确定我的替代方案是否有效.

使用我的应用程序中的一个简单示例:
我有一个名为WebClient的类来处理异步Web请求,它接受一个名为iCallback的接口,它将响应从服务器返回给调用者,在我的活动中,一旦我得到这个回调,我需要关闭一个对话框,并可能执行一些与活动相关的事情(比如触发onBackPressed()和setResult()).
所以这是我创建的静态内部类:

private static class CallBack implements WebClient.ICallback
{
    private WeakReference<ProgressDialog> mProgDiag;
    private WeakReference<BaseActivity> mActivity;

    public CallBack(BaseActivity activity, ProgressDialog progDiag)
    {
        this.mProgDiag = new WeakReference<>(progDiag);
        this.mActivity = new WeakReference<>(activity);
    }

    @Override
    public void onCallback(String data)
    {
        String responseAsString = Utils.extractStringFromResponse(...);

        final BaseActivity parentActivity = mActivity.get();
        ProgressDialog dialog = mProgDiag.get();

        if(dialog != null)
        {
            dialog.dismiss();
        }

        if (responseAsString == null)
        {
            if(parentActivity != null)
            {
                Utils.makeServerErrorDialog(parentActivity,
                                            new iDialogButtonClickedListener()
                                            {
                                                @Override
                                                public void onDialogButtonClicked()
                                                {
                                                    parentActivity.onBackPressed();
                                                }
                                            });
            } …
Run Code Online (Sandbox Code Playgroud)

java android memory-leaks inner-classes

6
推荐指数
1
解决办法
1037
查看次数