我用回收器视图和工具栏做了布局。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/view_pager_promos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:theme="@style/AppTheme.AppBarOverlay"
app:elevation="0dp">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleGravity="left|bottom"
app:expandedTitleMarginBottom="@dimen/dp_8"
app:expandedTitleMarginStart="0dp"
app:expandedTitleTextAppearance="@style/ToolbarExpandedTitle3"
app:layout_scrollFlags="scroll|enterAlways">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar_tokopoint"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
app:layout_collapseMode="pin" />
<View
android:id="@+id/status_bar_bg"
android:layout_width="match_parent"
android:layout_height="25dp"
android:background="@color/green_600"
android:visibility="visible"
android:alpha="0"
app:layout_anchor="@id/list"
app:layout_collapseMode="pin" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
</RelativeLayout>
在工具栏中有一些带有通知的图标,同样的图标也出现在RecyclerView的headerItem中。我想在工具栏图标的单击上隐藏headeritem图标和工具栏图标的通知。如何实现这一功能。
您可以在某种布尔条件下使特定视图可见和不可见。使您的RecycerView适配器构造函数有点像这样
private Context context;
private boolean isVisible;
public MyRecyclerViewAdapter(Context context, boolean isVisible) {
this.context = context;
this.isVisible = isVisible;
}
并相应地设置视图的可见性
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (isVisible)
holder.binding.ivNotification.setVisibility(View.VISIBLE);
else
holder.binding.ivNotification.setVisibility(View.INVISIBLE);
}
若要在工具栏图标单击时修改视图,请在RecycerView适配器中创建一个公共方法,如下所示
public void changeVisibility(boolean isVisible){
this.isVisible = isVisible;
notifyDataSetChanged();
}
现在在你的activity上,当你点击你的工具栏图标,你调用这个适配器方法,确保在调用这个方法之前初始化你的适配器-
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
MyRecyclerViewAdapter adapter;
private boolean isVisible = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
// Set RecyclerView with adapter
binding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyRecyclerViewAdapter(this, true);
binding.recyclerView.setAdapter(adapter);
// On toolbar icon click
binding.ivNotification.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isVisible = !isVisible;
adapter.changeVisibility(isVisible);
}
});
}
}