gridview如何在android中选择一个项目



我的活动表单中有网格视图,即在网格视图中显示的服务器渲染数据。如果我选择网格项目想要改变背景颜色,剩下的所有颜色都应该和我应用的颜色相同。

一次如何在网格视图中选择一个项目,但它正在选择多个项目

xml:

<?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="wrap_content"
    android:background="@color/bg"
    android:id="@+id/contact_card"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">
    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_anchorGravity="center"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:id="@+id/card_details">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:id="@+id/cards"
                android:padding="3dp"
                android:background="@color/bg">
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/speclist"
                    android:layout_gravity="left"
                    android:gravity="left"
                    android:orientation="vertical">
<!--                    <TextView-->
<!--                        android:layout_width="wrap_content"-->
<!--                        android:layout_height="wrap_content"-->
<!--                        android:layout_gravity="center"-->
<!--                        android:gravity="center"-->
<!--                        android:id="@+id/datetime"-->
<!--                        android:padding="10dp"-->
<!--                        android:textColor="@color/black"-->
<!--                        android:text="7:30"></TextView>-->
                    <Button
                        android:id="@+id/datetime"
                        android:layout_width="100dp"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:gravity="center"
                        android:padding="5dp"
                        android:text="10:00"
                        android:background="@drawable/rectangle_border_white"
                        android:textColor="@color/theme" />
                </LinearLayout>
            </LinearLayout>

        </LinearLayout>

    </FrameLayout>
</RelativeLayout>

Adapter.java:

public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View gridView = null;
        final Button datetime;
        LinearLayout speclist;
        if (convertView == null) {
            gridView = new View(mContext);
            convertView=inflater.inflate(R.layout.datelist, null);
            datetime=convertView.findViewById(R.id.datetime);
            datetime.setText(getAppointmentDateModels.get(position).getStartTime());
            datetime.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    row_index=position;
                    notifyDataSetChanged();
                    if(row_index==position){
                        datetime.setBackgroundResource(R.drawable.rectangle_border_theme);
                        datetime.setTextColor(Color.WHITE);
                    }else {
                        datetime.setBackgroundResource(R.drawable.rectangle_border_white);
                        datetime.setTextColor(Color.rgb(73,179,206));
                    }

                    clickListener.myItemClick(position);
                }
            });

        }
        return convertView;
    }

您可以跟踪上次单击的位置,这样可以设置正确的UI。在适配器中添加最后一个位置:

 int lastPosition = -1;

getView中,如果当前位置等于lastPosition,您将设置正确的颜色,并且onClick您将更新新的点击位置:

    public View getView(final int position, View convertView, ViewGroup parent) {
    ...
    if (convertView == null) {
        ...
        if (position == lastPosition) {
            datetime.setBackgroundResource(R.drawable.rectangle_border_theme);
            datetime.setTextColor(Color.WHITE);
        } else {
            datetime.setBackgroundResource(R.drawable.rectangle_border_white);
            datetime.setTextColor(Color.rgb(73,179,206));
        }
        datetime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                lastPosition = position;
                notifyDataSetChanged();
            }
        });
    }
    return convertView;
}

最新更新