Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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
Java 显示和隐藏列表视图_Java_Android_Listview - Fatal编程技术网

Java 显示和隐藏列表视图

Java 显示和隐藏列表视图,java,android,listview,Java,Android,Listview,我想这样做列表视图。我想要的是当用户触摸第一项时,第二项行出现。当用户触摸第三行项目时,上一个项目将再次自动隐藏。如何实现这一点而不是使用可扩展的listview?指导我实现这一目标。提前谢谢。很抱歉我有点忙,所以我现在无法编写代码。但是下面是你可以用来得到你想要的东西的方法。我会在有时间的时候添加代码 有一个参数名“android:animateayoutchanges”,将其应用于视图的父视图,该父视图将可见和不可见 保存已单击并展开的项目的位置 单击该项目时,将视图的可见性设置为“可见”

我想这样做列表视图。我想要的是当用户触摸第一项时,第二项行出现。当用户触摸第三行项目时,上一个项目将再次自动隐藏。如何实现这一点而不是使用可扩展的listview?指导我实现这一目标。提前谢谢。

很抱歉我有点忙,所以我现在无法编写代码。但是下面是你可以用来得到你想要的东西的方法。我会在有时间的时候添加代码

  • 有一个参数名“android:animateayoutchanges”,将其应用于视图的父视图,该父视图将可见和不可见
  • 保存已单击并展开的项目的位置
  • 单击该项目时,将视图的可见性设置为“可见”
  • 再次单击该项目位置时,将该项目的可见性设置为“消失”
  • 单击其他项目时,将存储项目位置的可见性设置为“已消失”,将当前选定项目的可见性设置为“可见”,并存储其位置。 就这样
  • android:animateayoutchanges的使用使得当您将可见性设置为visible或gone并且视图向上或向下移动时,此移动将具有平滑的动画

    稍后我将用代码更新我的答案,但您将从上述步骤中获得想法

    更新

        public class ShippingAdapter extends RecyclerView.Adapter<ShippingAdapter.ViewHolder> {
    
        private ArrayList<ShippingOptions> list;
        private int expandedPosition = -1;
        private int listSize = 0;
        private int checkedPositon = -1;
        private String currency;
    
        public ShippingAdapter(ArrayList<ShippingOptions> list, String currency, AdapterInterface listener) {
            this.list = list;
            listSize = list.size();
            this.currency = currency;
        }
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            // create a new view
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_shipping_options, parent, false);
            // Layout in which you will add **android:animatelayoutchanges**
            return new ViewHolder(v);
        }
    
    
        @Override
        public void onBindViewHolder(final ViewHolder holder, final int position) {
            ShippingOptions item = list.get(position);
            holder.name.setText(item.getName());
            holder.fee.setText(utils.getFormattedCurrency(currency, Double.parseDouble(item.getShippingFee())));
            holder.description.setText(item.getDescription());
            holder.deliveryTime.setText(item.getDeliveryTime());
            if (listSize == 1) {
                list.get(position).setExpanded(true);
            }
    
    
            **if (list.get(position).isExpanded()) {
                holder.expandableView.setVisibility(View.VISIBLE);
                holder.checkBox.setVisibility(View.VISIBLE);
                if (checkedPositon == position) {
                    holder.checkBox.setChecked(true);
                } else {
                    holder.checkBox.setChecked(false);
                }
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    holder.parent.setElevation(12);
                    holder.parent.setTranslationZ(6);
                    holder.parent.setClipToPadding(false);
                    holder.parent.setClipToOutline(false);
                }
            } else {
                holder.expandableView.setVisibility(View.GONE);
                holder.checkBox.setVisibility(View.GONE);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    holder.parent.setElevation(0);
                    holder.parent.setTranslationZ(0);
                }
            }**
    
            **holder.parent.setOnClickListener(new View.OnClickListener() {
                @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
                @Override
                public void onClick(View v) {
                    if (listSize > 1) {
                        if (expandedPosition == position) {
                            if (list.get(position).isExpanded()) {
                                list.get(position).setExpanded(false);
                            } else {
                                list.get(position).setExpanded(true);
                            }
                            notifyItemChanged(position);
                        } else {
                            if (expandedPosition >= 0) {
                                list.get(expandedPosition).setExpanded(false);
                                notifyItemChanged(expandedPosition);
                            }
                            expandedPosition = position;
                            list.get(expandedPosition).setExpanded(true);
                            notifyItemChanged(expandedPosition);
                        }
                    }
                }
            });**
    
    
        }
    
        @Override
        public int getItemCount() {
            return list.size();
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
            // each data item is just a string in this case
            public TextView name, fee, description, deliveryTime;
            public LinearLayout parent, expandableView;
            public CheckBox checkBox;
    
            public ViewHolder(View v) {
                super(v);
    
                name = (TextView) v.findViewById(R.id.tv_shipping_name);
                fee = (TextView) v.findViewById(R.id.tv_shipping_fee);
                description = (TextView) v.findViewById(R.id.tv_description);
                deliveryTime = (TextView) v.findViewById(R.id.tv_delivery_time);
                parent = (LinearLayout) v.findViewById(R.id.parent);
                expandableView = (LinearLayout) v.findViewById(R.id.expandable_view);
                checkBox = (CheckBox) v.findViewById(R.id.checkbox);
    
            }
    
    
        }
    }
    

    你的意思是更新活动xml上的参数吗?“android:animateayoutchanges”是的,在列表项的布局中添加此参数并将其设置为True如何执行第2步?保存项目位置是什么意思?我相信你是android编程新手,你将获得单击的特定项目的位置。用整数变量保存那个位置是的,我是个新手。android:listview上的animatedlayoutchanges(右?;)
        <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/parent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:animateLayoutChanges="true"
        android:background="@color/white"
        android:orientation="vertical"
        android:padding="10dp">
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="?listPreferredItemHeightSmall"
            android:gravity="center_vertical">
    
            <TextView
                android:id="@+id/tv_shipping_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="@style/text_medium"
                android:textColor="@color/colorPrimary" />
    
            <CheckBox
                android:id="@+id/checkbox"
                android:layout_width="35dp"
                android:layout_height="35dp"
                android:layout_alignParentEnd="true"
                android:background="?android:attr/listChoiceIndicatorMultiple"
                android:button="@null"
                android:checked="false"
                android:visibility="visible" />
        </RelativeLayout>
    
        <LinearLayout
            android:id="@+id/expandable_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:visibility="visible">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingBottom="10dp"
                android:paddingTop="10dp">
    
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="@string/label_shipping_fee" />
    
                <TextView
                    android:id="@+id/tv_shipping_fee"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="2" />
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingBottom="10dp"
                android:paddingTop="10dp">
    
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="@string/lable_description" />
    
                <TextView
                    android:id="@+id/tv_description"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="2" />
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingBottom="10dp"
                android:paddingTop="10dp">
    
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="@string/delivery_time" />
    
                <TextView
                    android:id="@+id/tv_delivery_time"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="2" />
            </LinearLayout>
        </LinearLayout>
    
    </LinearLayout>
    
        public class ShippingOptions implements Serializable {
    
        private String id;
        private String name;
        private String shippingFee;
        private String description;
        private String deliveryTime;
        private boolean isExpanded;
        private boolean isChecked;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getShippingFee() {
            return shippingFee;
        }
    
        public void setShippingFee(String shippingFee) {
            this.shippingFee = shippingFee;
        }
    
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    
        public String getDeliveryTime() {
            return deliveryTime;
        }
    
        public void setDeliveryTime(String deliveryTime) {
            this.deliveryTime = deliveryTime;
        }
    
        public boolean isExpanded() {
            return isExpanded;
        }
    
        public void setExpanded(boolean expanded) {
            isExpanded = expanded;
        }
    
        public boolean isChecked() {
            return isChecked;
        }
    
        public void setChecked(boolean checked) {
            isChecked = checked;
        }
    }