Xamarin 如何制作单行水平列表视图/列表?

Xamarin 如何制作单行水平列表视图/列表?,xamarin,xamarin.android,Xamarin,Xamarin.android,我想做的是创建一个带有图像和文本的单行Listview/列表,这就是我现在拥有的 我已经将numColumns更改为1,但是如何更改它以使其水平且可滚动?图片应该在上面,文字应该在下面 这是布局图 <?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview"

我想做的是创建一个带有图像和文本的单行Listview/列表,这就是我现在拥有的

我已经将numColumns更改为1,但是如何更改它以使其水平且可滚动?图片应该在上面,文字应该在下面

这是布局图

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:numColumns="1"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>

单个网格项

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:scaleType="centerCrop"
        android:id="@+id/my_image_vieww" />
    <TextView
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/my_text_view" />
</LinearLayout>

主要活动

var gridview = FindViewById<GridView> (Resource.Id.gridview);
            gridview.Adapter = new ImageAdapter (this);

            gridview.ItemClick += delegate (object sender, AdapterView.ItemClickEventArgs args) {
                Toast.MakeText (this, args.Position.ToString (), ToastLength.Short).Show ();
            };



public class ImageAdapter : BaseAdapter
    {
        Context context;

        public ImageAdapter (Context c)
        {
            context = c;
        }

        public override int Count {
            get { return thumbIds.Length; }
        }

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

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

        // create a new ImageView for each item referenced by the Adapter
        public override View GetView (int position, View convertView, ViewGroup parent)
        {
            ImageView imageView;
            View view;
            if (convertView == null) {  // if it's not recycled, initialize some attributes
                view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.my_grid_row, parent, false);
            } else {
                view = convertView;
            }

            var imageView2 = view.FindViewById<ImageView>(Resource.Id.my_image_vieww);
            imageView2.SetImageResource (thumbIds[position]);

            var textView = view.FindViewById<TextView>(Resource.Id.my_text_view);
            textView.Text = "Text to Display";
            return view;
        }


    }
var gridview=findviewbyd(Resource.Id.gridview);
Adapter=新的ImageAdapter(此);
gridview.ItemClick+=委托(对象发送者,AdapterView.ItemClickEventArgs args args){
Toast.MakeText(this,args.Position.ToString(),ToastLength.Short);
};
公共类ImageAdapter:BaseAdapter
{
语境;
公共图像适配器(上下文c)
{
上下文=c;
}
公共覆盖整数计数{
获取{return thumbIds.Length;}
}
public override Java.Lang.Object GetItem(int位置)
{
返回null;
}
公共覆盖长GetItemId(int位置)
{
返回0;
}
//为适配器引用的每个项目创建新的ImageView
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
图像视图图像视图;
视图;
如果(convertView==null){//如果它没有被回收,初始化一些属性
view=LayoutInflater.From(parent.Context).充气(Resource.Layout.my\u grid\u行,parent,false);
}否则{
视图=转换视图;
}
var imageView2=view.findviewbyd(Resource.Id.my\u image\u vieww);
imageView2.SetImageResource(thumbIds[position]);
var textView=view.findviewbyd(Resource.Id.my\u text\u视图);
textView.Text=“要显示的文本”;
返回视图;
}
}

请不要使用水平列表视图。 有预定义的android控件来实现这一点查看寻呼机

示例代码:

var _viewPager = view.FindViewById<ViewPager>(Resource.Id.viewPager);
            var _viewPageIndicatorCircle = view.FindViewById<CirclePageIndicator>(Resource.Id.viewPageIndicator);

            _viewPager.Adapter = new TestFragmentAdapter(fm);
            _viewPageIndicatorCircle.SetViewPager(_viewPager);


public class TestFragmentAdapter : FragmentPagerAdapter
    {

        public TestFragmentAdapter(Android.Support.V4.App.FragmentManager fm)
            : base(fm)
        {

        }

        public override Android.Support.V4.App.Fragment GetItem(int position)
        {
            return new TestFragment();
        }

        public override int Count
        {
            get
            {
                return 5;
            }
        }

    }

class TestFragment : Android.Support.V4.App.Fragment
    {

        public TestFragment()
        {
        }


        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var view = inflater.Inflate(Resource.Layout.MyViewPager , container, false);
            return view;
        }


    }
var\u viewPager=view.findviewbyd(Resource.Id.viewPager);
var _viewPageIndicator循环=view.FindViewById(Resource.Id.viewPageIndicator);
_viewPager.Adapter=新的TestFragmentAdapter(fm);
_ViewPageIndicator循环设置viewPager(_viewPager);
公共类TestFragmentAdapter:FragmentPagerAdapter
{
公共TestFragmentAdapter(Android.Support.V4.App.FragmentManager fm)
:基本(调频)
{
}
public override Android.Support.V4.App.Fragment GetItem(int位置)
{
返回新的TestFragment();
}
公共覆盖整数计数
{
得到
{
返回5;
}
}
}
类TestFragment:Android.Support.V4.App.Fragment
{
公共测试片段()
{
}
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态)
{
var视图=充气机。充气(Resource.Layout.MyViewPager,container,false);
返回视图;
}
}
Viewpager.xml

<android.support.v4.view.ViewPager
                        android:id="@+id/viewPager"
                        android:layout_width="fill_parent"
                        android:layout_height="209.6dp" />


如果您有任何疑问,请随时问我

我想您不需要ListView,而需要ViewPager。这是一个很好的例子。@i您好,我如何使用ViewPager实现这样的功能?ViewPager的工作原理类似于旋转木马。它使您能够水平滚动项目。