【问题标题】:com.google.android.material.appbar.AppBarLayout$LayoutParams cannot be cast to androidx.coordinatorlayout.widget.CoordinatorLayout$LayoutParamscom.google.android.material.appbar.AppBarLayout$LayoutParams 无法转换为 androidx.coordinatorlayout.widget.CoordinatorLayout$LayoutParams
【发布时间】:2021-12-20 03:44:18
【问题描述】:

我使用了 CoordinatorLayout + AppBarLayout,因此工具栏在滚动时可能会消失,并将 Recycler View 放在 tablayout 下方。但是在我更改了模型逻辑并在工具栏中添加了子元素之后,这个致命错误一直在发生。将根布局更改为 LinearLayout 或 FrameLayout 后,错误消失了,但我没有得到想要的行为。 我不会在代码 (MainActivity) 中调用、创建或更改 AppBarLayout 和 CoordinatorLayout 的布局参数。所以堆栈跟踪没有显示任何内部代码行,只是内部类逻辑。 这是 XML:

<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">


<com.google.android.material.appbar.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:contentInsetStart="0dp"
        app:layout_scrollFlags="scroll|snap"
        app:titleTextColor="@android:color/white">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/toolbarBackButton"
                android:layout_width="?attr/actionBarSize"
                android:layout_height="?attr/actionBarSize"
                android:visibility="invisible"/>

            <TextView
                android:id="@+id/toolbarText"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:background="@color/colorPrimary"
                android:fontFamily="sans-serif-medium"
                android:gravity="center_vertical"
                android:text="@string/activity_main_toolbar_title"
                android:textColor="@android:color/white"
                android:textSize="20sp" />

            <ImageView
                android:id="@+id/toolbarBucket"
                android:layout_width="?attr/actionBarSize"
                android:layout_height="?attr/actionBarSize" />
        </LinearLayout>
    </androidx.appcompat.widget.Toolbar>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabBackground="@color/colorPrimary"
        app:tabIndicatorColor="@color/colorIndicator"
        app:tabSelectedTextColor="@color/colorActive"
        app:tabTextColor="@color/colorInactive" />
</com.google.android.material.appbar.AppBarLayout>

<androidx.viewpager2.widget.ViewPager2
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_anchor="@id/tabs"
    app:layout_anchorGravity="bottom"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/add_fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right"
    android:layout_margin="@dimen/regularMargin"
    android:src="@drawable/ic_baseline_add_24"
    app:tint="@android:color/white"/></androidx.coordinatorlayout.widget.CoordinatorLayout>

任何线索将不胜感激! 我的主要活动代码

package com.example.loftmoney.screens.main;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;

import android.content.Intent;
import android.os.Bundle;

import com.example.loftmoney.R;
import com.example.loftmoney.model.Item;
import com.example.loftmoney.screens.additem.AddItemActivity;
import com.example.loftmoney.screens.balance.BalanceFragment;
import com.example.loftmoney.screens.budget.BudgetFragment;
import com.example.loftmoney.screens.main.adapter.FragmentItem;
import com.example.loftmoney.screens.main.adapter.MainPagerAdapter;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements MainClickAdapter, EditModeListener {

    private ViewPager2 viewPager;
    private Toolbar toolbar;
    TabLayout tabs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setupFab();
        setupTabs();
        setupToolbar();
    }

    private void setupToolbar() {
        toolbar = findViewById(R.id.toolbar);
    }

    private void setupTabs() {
        List<FragmentItem> fragments = setupFragments();

        tabs = findViewById(R.id.tabs);
        viewPager = findViewById(R.id.viewPager);
        MainPagerAdapter adapter = new MainPagerAdapter(fragments, this, 0);//behavior?
        viewPager.setOffscreenPageLimit(fragments.size());
        viewPager.setAdapter(adapter);

        new TabLayoutMediator(tabs, viewPager,
                (tab, position) -> tab.setText(
                        fragments.get(position).getTitle()
                )
        ).attach();
    }

    private List<FragmentItem> setupFragments() {
        List<FragmentItem> fragments = new ArrayList();
        fragments.add(new FragmentItem(new BudgetFragment(), getString(R.string.expenses), Item.ItemType.EXPENSE));
        fragments.add(new FragmentItem(new BudgetFragment(), getString(R.string.incomes), Item.ItemType.INCOME));
        fragments.add(new FragmentItem(new BalanceFragment(), getString(R.string.balance)));
        return fragments;
    }

    private Fragment getActiveFragment() {
        final int activeFragmentIndex = viewPager.getCurrentItem();
        Fragment activeFragment = (BudgetFragment) getSupportFragmentManager().getFragments().get(activeFragmentIndex);
        return activeFragment;
    }

    private void setupFab() {
        FloatingActionButton addFab = findViewById(R.id.add_fab);
        addFab.setOnClickListener(v -> onFabClick());
    }

    @Override
    public void onFabClick() {
        BudgetFragment activeFragment = (BudgetFragment) getActiveFragment();
        Intent intent = new Intent(MainActivity.this, AddItemActivity.class).putExtra("type", activeFragment.type);
        activeFragment.startActivityForResult(intent, BudgetFragment.LAUNCH_ADD_ITEM);
    }

    @Override
    public void onEditModeChangeListener(boolean status) {
        toolbar.setBackgroundColor(getApplicationContext().getColor(
                status ? R.color.editModeColor : R.color.colorPrimary));
    }
}

【问题讨论】:

  • 这是LayoutParams 的错误导入/转换问题,您使用的是AppBar,但您导入的是ConstraintLayoutLayoutParams。您尚未共享代码,请先共享。
  • 我添加了 MainActivity 代码

标签: android xml coordinator-layout


【解决方案1】:

这是因为我设置了一个锚。 我已经删除了这两行,一切正常

app:layout_anchor="@id/tabs"
app:layout_anchorGravity="bottom"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    相关资源
    最近更新 更多