C# 在gridview中向上滚动时不保持该位置

C# 在gridview中向上滚动时不保持该位置,c#,android,android-layout,xamarin,gridview,C#,Android,Android Layout,Xamarin,Gridview,我创建了一个gridview适配器,可以查看图像和文本。它工作正常,但当我向上滚动时,位置不对齐。但当我向下滚动时,对齐位置是完美的 这是我向上滚动时的图片: 这是我的密码: gridview_layout.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientat

我创建了一个gridview适配器,可以查看图像和文本。它工作正常,但当我向上滚动时,位置不对齐。但当我向下滚动时,对齐位置是完美的

这是我向上滚动时的图片:

这是我的密码:

gridview_layout.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  <ImageView
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginTop="15dp"
    android:id="@+id/imageViewGrid"/>
  <TextView
    android:layout_marginTop="5dp"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textViewGrid"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:padding="16dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <GridView
            android:id="@+id/grid_view_image_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:columnWidth="110dp"
            android:gravity="center"
            android:numColumns="auto_fit" />
    </RelativeLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center" />
</FrameLayout>
fragment_layout.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  <ImageView
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginTop="15dp"
    android:id="@+id/imageViewGrid"/>
  <TextView
    android:layout_marginTop="5dp"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textViewGrid"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:padding="16dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <GridView
            android:id="@+id/grid_view_image_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:columnWidth="110dp"
            android:gravity="center"
            android:numColumns="auto_fit" />
    </RelativeLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center" />
</FrameLayout>
CustomeGridViewAdapter.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Java.Lang;
using Square.Picasso;


namespace testing_code
{
    public class CustomGridViewAdapter : BaseAdapter
    {
        private Context context;
        private string[] gridViewString;


        private string[] gridViewImage;
        public CustomGridViewAdapter(Context context, string[] gridViewstr, string[] gridViewImage )
        {
            this.context = context;
            gridViewString = gridViewstr;
            this.gridViewImage = gridViewImage;
        }
        public override int Count
        {
            get
            {
                return gridViewString.Length;
            }
        }

        public override Java.Lang.Object GetItem(int position)
        {
            return null;
        }

        public override long GetItemId(int position)
        {
            return 0;
        }

        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            View view;

            LayoutInflater inflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
            if(convertView == null)
            {
                view = new View(context);
                view = inflater.Inflate(Resource.Layout.gridview_layout, null);
                TextView txtview = view.FindViewById<TextView>(Resource.Id.textViewGrid);
                ImageView imgview = view.FindViewById<ImageView>(Resource.Id.imageViewGrid);

                txtview.Text = gridViewString[position];

                Picasso.With(context)
       .Load((gridViewImage[position]))
       .Into(imgview);
            }
            else
            {

                view = (View)convertView;

            }
            return view;
        }


    }
}
片段1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
using SupportFragment = Android.Support.V4.App.Fragment;
using Android.Support.Design.Widget;
using Android.Support.V7.App;
using Android.Support.V4.Widget;
using Android.Support.V4.App;
using MySql.Data.MySqlClient;
using System.Data;

namespace testing_code
{
    public class Fragment1 : SupportFragment
    {
        MySqlConnection conn = new MySqlConnection();

        string query = "server=sample.com;port=3306;database=db_sample;user id=root;password=123";

        GridView gridview;
        List<string> gridviewstring = new List<string>();
        List<string> imgview = new List<string>();

        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Create your fragment here
        }

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            // Use this to return your custom view for this Fragment
            // return inflater.Inflate(Resource.Layout.YourFragment, container, false);

            View view = inflater.Inflate(Resource.Layout.fragment_layout, container, false);


            conn.ConnectionString = query;

            MySqlCommand cmd = new MySqlCommand("Select * from wp_mobile_product", conn);


            try
            {
                conn.Open();
                MySqlDataReader reader = cmd.ExecuteReader();


                while (reader.Read())
                {

                    string get_id = reader["product_title"].ToString();
                    string get_img = reader["product_image"].ToString();


                    gridviewstring.Add(get_id);
                    imgview.Add(get_img);
                }
            }
            catch (MySqlException ex)
            {
                Android.Support.V7.App.AlertDialog.Builder except = new Android.Support.V7.App.AlertDialog.Builder(Activity);
                except.SetTitle("Please report this to our website(error server timeout)");
                except.SetMessage(ex.ToString());
                except.SetPositiveButton("Ok", (senderAlert, args) =>
                {
                    except.Dispose();
                });
                except.Show();
            }
            finally
            {
                conn.Close();
            }


            string[] GridViewStringArray = gridviewstring.ToArray();
            string[] GridImgViewArray = imgview.ToArray();
            CustomGridViewAdapter adapter = new CustomGridViewAdapter(Activity, GridViewStringArray, GridImgViewArray);

            gridview = view.FindViewById<GridView>(Resource.Id.grid_view_image_text);
            gridview.Adapter = adapter;

            return view;
        }

    }
}

我已经测试了你的代码,原因似乎是你的文本视图中有一个很长的文本

有几种解决方案:

将文本视图设置为固定高度,而不是使用换行内容。 在文本视图中将android:singleLine设置为true。 或者您可以使用android:minLines设置TextView的最小行号,例如:android:minLines=3
谢谢你回答我的问题。我现在就试试你的解决方案:我希望现在能解决好。它就像一个符咒。非常感谢你解决了我的问题。我真的很感激你。再次感谢您在此问题的结尾处留下了50.87.145.151的数据库凭据。为了您自己的安全,请确保已删除该帐户。