Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在回收器视图中隐藏特定行的视图?_Android_Android Recyclerview_Android Adapter - Fatal编程技术网

Android 如何在回收器视图中隐藏特定行的视图?

Android 如何在回收器视图中隐藏特定行的视图?,android,android-recyclerview,android-adapter,Android,Android Recyclerview,Android Adapter,我有一个使用回收器视图显示列表的列表。问题是我在“活动和回收”视图中有一个工厂。此外,我还添加了一个弹出菜单,点击右侧的三个点。但我无法访问列表最后一行的三个点,它隐藏在晶圆厂后面。如下所示: 所以为了避免这种情况,我想在列表的最后一个索引处添加一个空行。但它显示了纵断面图和水平视图。我想把这个藏起来。我该怎么做 主要活动布局: <?xml version="1.0" encoding="utf-8"?> <android.support.design.widg

我有一个使用回收器视图显示列表的列表。问题是我在“活动和回收”视图中有一个工厂。此外,我还添加了一个弹出菜单,点击右侧的三个点。但我无法访问列表最后一行的三个点,它隐藏在晶圆厂后面。如下所示:

所以为了避免这种情况,我想在列表的最后一个索引处添加一个空行。但它显示了纵断面图和水平视图。我想把这个藏起来。我该怎么做

主要活动布局:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context="com.example.siddhi.meavita.Activities.EventsListActivity">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.AppBarOverlay">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.AppBarLayout>

        <include layout="@layout/content_events_list" />
        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            android:layout_margin="@dimen/fab_margin"
            android:src="@drawable/ic_add_white_36dp"
            android:background="@color/colorAccent"/>

    </android.support.design.widget.CoordinatorLayout>


        <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/parentPanel"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:context="com.example.siddhi.meavita.Activities.EventsListActivity"
        tools:showIn="@layout/activity_events_list">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:scrollbars="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal|bottom"
            android:paddingTop="05dp"
            android:paddingBottom="10dp" />
    </RelativeLayout>

活动卡布局:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_marginTop="05dp">

        <com.github.siyamed.shapeimageview.CircularImageView
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:src="@drawable/ic_person_black_48dp"
            app:siBorderWidth="1dp"
            app:siBorderColor="@android:color/darker_gray"
            android:layout_marginLeft="20dp"
            android:id="@+id/eventsIcon"
            android:layout_marginTop="05dp"
            android:layout_marginBottom="05dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Event name"
            android:id="@+id/scheduleName"
            android:textSize="14sp"
            android:layout_alignTop="@+id/eventsIcon"
            android:layout_toRightOf="@+id/eventsIcon"
            android:layout_toEndOf="@+id/eventsIcon"
            android:layout_marginLeft="10dp"
            android:layout_marginStart="10dp"
            android:textColor="@android:color/black"
            android:textStyle="bold" />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_more_vert_black_24dp"
            android:id="@+id/more"
            android:layout_centerInParent="true"
            android:layout_alignParentEnd="true"
            android:layout_marginRight="20dp" />
        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@color/switch_thumb_normal_material_light"
            android:layout_alignBottom="@+id/eventsIcon"
            android:layout_alignParentBottom="true"
            android:layout_marginRight="20dp"
            android:layout_toEndOf="@+id/eventsIcon"
            android:layout_below="@+id/eventsIcon"
            android:layout_alignLeft="@+id/scheduleName"
            android:layout_alignStart="@+id/scheduleName"
            android:id="@+id/view4"></View>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="(Type of event)"
            android:id="@+id/eventType"
            android:layout_centerVertical="true"
            android:layout_alignLeft="@+id/scheduleName"
            android:layout_alignStart="@+id/scheduleName"
            android:textSize="12sp"
            android:textColor="@android:color/black" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Date and time"
            android:id="@+id/eventDateTime"
            android:layout_below="@+id/eventType"
            android:layout_alignLeft="@+id/view4"
            android:layout_alignStart="@+id/view4"
            android:textSize="12sp"
            android:textColor="@android:color/black"
            android:layout_marginTop="02dp" />
    </RelativeLayout>

</LinearLayout>

适配器:

       public class EventListAdapter extends RecyclerView.Adapter<EventListAdapter.MyViewHolder>{

        private final OnItemClickListener listener;
        private ArrayList<Event> eventsList;
        int status;
        Context context;

        public interface OnItemClickListener {
            void onItemClick(Event item);
        }

        public class MyViewHolder extends RecyclerView.ViewHolder {
            public TextView eventName,eventType,eventDateTime;
            public PopupMenu popup;
            public ImageView more;
            public View horizontalView;

            public com.github.siyamed.shapeimageview.CircularImageView profileImage;


            public MyViewHolder(View view) {
                super(view);
                eventName = (TextView) view.findViewById(R.id.scheduleName);
                eventType = (TextView) view.findViewById(R.id.eventType);
                eventDateTime = (TextView) view.findViewById(R.id.eventDateTime);
                more = (ImageView) itemView.findViewById(R.id.more);
                horizontalView = (View) itemView.findViewById(R.id.view4);
                popup = new PopupMenu(context, more);
                profileImage = (com.github.siyamed.shapeimageview.CircularImageView) itemView.findViewById(R.id.eventsIcon);

                MenuInflater inflate = popup.getMenuInflater();
                inflate.inflate(R.menu.pop_up_menu,popup.getMenu());


                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

                    @Override
                    public boolean onMenuItemClick(final MenuItem item) {
                        switch (item.getItemId()) {
                            case R.id.edit:
                                // do what you need.
                                int pos = getLayoutPosition();
                                Event currentItem= eventsList.get(pos);
                                // update(pos);

                             //   ((CheckListActivity)context).updateCheckList(context,currentItem);

                                Toast.makeText(context, "Edit", Toast.LENGTH_SHORT).show();
                                break;
                            case R.id.delete:
                                // do what you need .
                                int pos1 = getLayoutPosition();
                                Event currentItem1= eventsList.get(pos1);

                                ((EventsListActivity)context).deleteEvent(context,currentItem1);

                                Toast.makeText(context, "Delete", Toast.LENGTH_SHORT).show();
                                break;
                            default:
                                return false;
                        }
                        return false;
                    }
                });

            }

            public void bind(final Event item, final OnItemClickListener listener) {

                itemView.setOnClickListener(new View.OnClickListener() {
                    @Override public void onClick(View v) {
                        listener.onItemClick(item);
                    }
                });
            }
        }


        public EventListAdapter(ArrayList<Event> eventsList,Context context,OnItemClickListener listener) {
            this.eventsList = eventsList;
            this.listener = listener;
            this.context = context;
        }

        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View itemView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.event_card, parent, false);

            return new MyViewHolder(itemView);
        }

        @Override
        public void onBindViewHolder(final MyViewHolder holder, int position) {

            Event events = eventsList.get(position);
            holder.eventName.setText(events.getEventName());
            holder.eventType.setText(events.getEventType());
            holder.eventDateTime.setText(events.getEventDate() + "," + events.getEventTime());

            holder.bind(eventsList.get(position), listener);


            holder.more.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    Toast.makeText(context, "More", Toast.LENGTH_SHORT).show();
                    holder.popup.show();
                }
            });



        }

        @Override
        public int getItemCount() {
            return eventsList.size();
        }
    }
公共类EventListAdapter扩展了RecyclerView.Adapter{
私人终场监听者;
私人ArrayList事件列表;
智力状态;
语境;
公共接口侦听器{
无效MClick(事件项);
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
公共文本查看事件名称、事件类型、事件日期时间;
公共弹出菜单弹出;
公众形象多看;
公众视野;横向视野;
public com.github.siyamed.shapeimageview.CircularImageView profileImage;
公共MyViewHolder(视图){
超级(视图);
eventName=(TextView)view.findViewById(R.id.scheduleName);
eventType=(TextView)view.findViewById(R.id.eventType);
eventDateTime=(TextView)view.findViewById(R.id.eventDateTime);
more=(ImageView)itemviewbyd(R.id.more);
horizontalView=(视图)itemView.findViewById(R.id.view4);
popup=新弹出菜单(上下文,更多);
profileImage=(com.github.siyamed.shapeimageview.CircularImageView)itemView.findviewbyd(R.id.eventsIcon);
MenuInflater充气=弹出窗口。getMenuInflater();
充气。充气(R.menu.pop_up_menu,popup.getMenu());
setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(最终菜单项){
开关(item.getItemId()){
案例R.id.edit:
//做你需要的。
int pos=getLayoutPosition();
Event currentItem=eventsList.get(pos);
//更新(pos);
//((CheckListActivity)context.updateCheckList(context,currentItem);
Toast.makeText(上下文,“编辑”,Toast.LENGTH_SHORT).show();
打破
案例R.id.delete:
//做你需要的。
int pos1=getLayoutPosition();
Event currentItem1=eventsList.get(pos1);
((EventsListActivity)context.deleteEvent(context,currentItem1);
Toast.makeText(上下文,“删除”,Toast.LENGTH_SHORT).show();
打破
违约:
返回false;
}
返回false;
}
});
}
公共void绑定(最终事件项,最终侦听器){
itemView.setOnClickListener(新视图.OnClickListener(){
@覆盖公共void onClick(视图v){
listener.onItemClick(项);
}
});
}
}
public EventListAdapter(ArrayList eventsList、上下文上下文、OnItemClickListener侦听器){
this.eventsList=eventsList;
this.listener=listener;
this.context=上下文;
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.event_卡,父级,假);
返回新的MyViewHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(最终MyViewHolder,内部位置){
Event events=eventsList.get(位置);
holder.eventName.setText(events.getEventName());
holder.eventType.setText(events.getEventType());
holder.eventDateTime.setText(events.getEventDate()+”,“+events.getEventTime());
holder.bind(eventsList.get(position),listener);
holder.more.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(上下文,“更多”,Toast.LENGTH_SHORT).show();
holder.popup.show();
}
});
}
@凌驾
public int getItemCount(){
返回eventsList.size();
}
}

如何做到这一点?谢谢。

您可以将填充添加到您的recyclerview中,这样更容易:

android:clipToPadding="false"
android:paddingBottom="80dp"
否则,您可以检查您是否处于onBindViewHolder中的最后一个位置:

if (position == eventsList.size() -1){
  holder.profileImage.setVisibility(View.INVISIBLE)
}else{
  holder.profileImage.setVisibility(View.VISIBLE)
}

向浮动操作按钮添加自定义布局行为:实现此行为将确保在滚动recyclerview时隐藏FAB

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="56dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:src="@drawable/icon_search"
        app:backgroundTint="#0F9D58"
        app:fabSize="normal"
        app:layout_anchor="@id/bottomCartFrameLayout"
        app:layout_anchorGravity="bottom|right|end"
        app:layout_behavior="yourpackagename.ScrollAwareFABBehavior"
        app:layout_collapseMode="parallax"
        /> 


让我知道这是否有帮助。

如果您试图在行项目中隐藏父视图,它将留下一个空白行。因此,最好从ArrayList中删除项目,然后用户
notifyItemRemoved(position)
更新更改。填充看起来不太好。它不会在整个屏幕上滚动@您是否添加了cliptoppadding=“fa?”
import android.content.Context;
import android.os.Build;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPropertyAnimatorListener;
import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;

import yourpackagename.R;



public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior {
    private static final Interpolator INTERPOLATOR = new FastOutSlowInInterpolator();
    private boolean mIsAnimatingOut = false;

    public ScrollAwareFABBehavior(Context context, AttributeSet attrs) {
        super();
    }

    @Override
    public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
                                       final View directTargetChild, final View target, final int nestedScrollAxes) {
        // Ensure we react to vertical scrolling
        return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL
                || super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
    }

    @Override
    public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
                               final View target, final int dxConsumed, final int dyConsumed,
                               final int dxUnconsumed, final int dyUnconsumed) {
        super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
        if (dyConsumed > 0 && !this.mIsAnimatingOut && child.getVisibility() == View.VISIBLE) {
            // User scrolled down and the FAB is currently visible -> hide the FAB
            animateOut(child);
        } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
            // User scrolled up and the FAB is currently not visible -> show the FAB
            animateIn(child);
        }
    }

    // Same animation that FloatingActionButton.Behavior uses to hide the FAB when the AppBarLayout exits
    private void animateOut(final FloatingActionButton button) {
        if (Build.VERSION.SDK_INT >= 14) {
            ViewCompat.animate(button).scaleX(0.0F).scaleY(0.0F).alpha(0.0F).setInterpolator(INTERPOLATOR).withLayer()
                    .setListener(new ViewPropertyAnimatorListener() {
                        public void onAnimationStart(View view) {
                            ScrollAwareFABBehavior.this.mIsAnimatingOut = true;
                        }

                        public void onAnimationCancel(View view) {
                            ScrollAwareFABBehavior.this.mIsAnimatingOut = false;
                        }

                        public void onAnimationEnd(View view) {
                            ScrollAwareFABBehavior.this.mIsAnimatingOut = false;
                            view.setVisibility(View.GONE);
                        }
                    }).start();
        } else {
            Animation anim = AnimationUtils.loadAnimation(button.getContext(), R.anim.fab_out);
            anim.setInterpolator(INTERPOLATOR);
            anim.setDuration(200L);
            anim.setAnimationListener(new Animation.AnimationListener() {
                public void onAnimationStart(Animation animation) {
                    ScrollAwareFABBehavior.this.mIsAnimatingOut = true;
                }

                public void onAnimationEnd(Animation animation) {
                    ScrollAwareFABBehavior.this.mIsAnimatingOut = false;
                    button.setVisibility(View.GONE);
                }

                @Override
                public void onAnimationRepeat(final Animation animation) {
                }
            });
            button.startAnimation(anim);
        }
    }

    // Same animation that FloatingActionButton.Behavior uses to show the FAB when the AppBarLayout enters
    private void animateIn(FloatingActionButton button) {
        button.setVisibility(View.VISIBLE);
        if (Build.VERSION.SDK_INT >= 14) {
            ViewCompat.animate(button).scaleX(1.0F).scaleY(1.0F).alpha(1.0F)
                    .setInterpolator(INTERPOLATOR).withLayer().setListener(null)
                    .start();
        } else {
            Animation anim = AnimationUtils.loadAnimation(button.getContext(), R.anim.fab_in);
            anim.setDuration(200L);
            anim.setInterpolator(INTERPOLATOR);
            button.startAnimation(anim);
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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"
    android:fitsSystemWindows="true">

    <FrameLayout
        android:id="@+id/bottomCartFrameLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:behavior_hideable="false"
        app:layout_behavior="@string/bottom_sheet_behavior">

        <include layout="@layout/bottom_sheet_content_view"
            />
    </FrameLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="56dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:src="@drawable/icon_search"
        app:backgroundTint="#0F9D58"
        app:fabSize="normal"
        app:layout_anchor="@id/bottomCartFrameLayout"
        app:layout_anchorGravity="bottom|right|end"
        app:layout_behavior="yourpackagename.ScrollAwareFABBehavior"
        app:layout_collapseMode="parallax"
        />

</android.support.design.widget.CoordinatorLayout>