提问者:小点点

如何在单击工具栏图标时隐藏Recyclerview视图的特定视图


我用回收器视图和工具栏做了布局。

<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图标和工具栏图标的通知。如何实现这一功能。


共1个答案

匿名用户

您可以在某种布尔条件下使特定视图可见和不可见。使您的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);
        }
    });

}

}