com.google.android.material.appbar.AppBarLayout$LayoutParams 无法转换为 androidx.coordinatorlayout.widget
Posted
技术标签:
【中文标题】com.google.android.material.appbar.AppBarLayout$LayoutParams 无法转换为 androidx.coordinatorlayout.widget.CoordinatorLayout$LayoutParams【英文标题】:com.google.android.material.appbar.AppBarLayout$LayoutParams cannot be cast to 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_
android:layout_>
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_
android:layout_>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_
android:layout_
android:background="?attr/colorPrimary"
app:contentInsetStart="0dp"
app:layout_scrollFlags="scroll|snap"
app:titleTextColor="@android:color/white">
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal">
<ImageView
android:id="@+id/toolbarBackButton"
android:layout_
android:layout_
android:visibility="invisible"/>
<TextView
android:id="@+id/toolbarText"
android:layout_
android:layout_
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_
android:layout_ />
</LinearLayout>
</androidx.appcompat.widget.Toolbar>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_
android:layout_
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_
android:layout_
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_
android:layout_
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
,但您导入的是ConstraintLayout
的LayoutParams
。您尚未共享代码,请先共享。
我添加了 MainActivity 代码
【参考方案1】:
这是因为我设置了一个锚。 我已经删除了这两行,一切正常
app:layout_anchor="@id/tabs"
app:layout_anchorGravity="bottom"
【讨论】:
以上是关于com.google.android.material.appbar.AppBarLayout$LayoutParams 无法转换为 androidx.coordinatorlayout.widget的主要内容,如果未能解决你的问题,请参考以下文章