Android 在片段中创建RecyclerView

Android 在片段中创建RecyclerView,android,android-recyclerview,Android,Android Recyclerview,我想在片段中的recyclerView中创建此UI,以及如何从其他片段调用。 它有TextView和ImageView。我在AdapterViewHolder行中遇到错误。 我已经做到了,有人能帮我吗 ModelAdapter.java public class ModelAdapter extends RecyclerView.Adapter<ModelAdapter.MyViewHolder> { private List<ItemData>

我想在片段中的recyclerView中创建此UI,以及如何从其他片段调用。
它有TextView和ImageView。我在AdapterViewHolder行中遇到错误。 我已经做到了,有人能帮我吗

ModelAdapter.java

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

  private List<ItemData> itemsData;
  public ImageView carBrandImg;
public TextView carBrandName;



public class MyViewHolder extends RecyclerView.ViewHolder {



    public MyViewHolder(View itemView) {
        super(itemView);
        carBrandImg = (ImageView) itemView.findViewById(R.id.carBrandImg);
        carBrandName = (TextView) itemView.findViewById(R.id.carBrandName);
    }
}





public ModelAdapter(ItemData[] itemsData) {
    this.itemsData = itemsData;
}

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

    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    ItemData brand = itemsData.get(position);
    MyViewHolder.carBrandImg.setImageResource(brand.getImg());
    MyViewHolder.carBrandName.setText(brand.getText());

}

@Override
public int getItemCount() {
    return itemsData.size();
}
}
MyFragment.java

  public class MyFragment extends Fragment {


public MyFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    View rootView = inflater.inflate(R.layout.fragment_my, container, false);
    // 1. get a reference to recyclerView
    RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.ls);

    // 2. set layoutManger
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    // this is data fro recycler view
    ItemData itemsData[] = {
            new ItemData("Indigo",R.drawable.abc),
            new ItemData("Red",R.drawable.xyz),
            new ItemData("Blue",R.drawable.pqr),
            new ItemData("Green",R.drawable.def),

    };


    // 3. create an adapter
    ModelAdapter mAdapter = new ModelAdapter(itemsData);
    // 4. set adapter
    recyclerView.setAdapter(mAdapter);
    // 5. set item animator to DefaultAnimator
    recyclerView.setItemAnimator(new DefaultItemAnimator());


    return rootView;
}
 }
fragment_my.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:id="@+id/headermodel"
    android:background="#9294a3">

    <TextView
        android:layout_width="35dp"
        android:text="1"
        android:textColor="#c2bbbb"
        android:gravity="center"
        android:textSize="30sp"
        android:layout_gravity="center"
        android:layout_marginLeft="15dp"

        android:layout_height="35dp" />

    <TextView
        android:layout_width="35dp"
        android:text="2"
        android:textColor="#fdfcfc"
        android:gravity="center"
        android:textSize="30sp"
        android:layout_gravity="center"
        android:layout_marginLeft="15dp"

        android:layout_height="35dp" />

    <TextView
        android:layout_width="220dp"
        android:layout_height="match_parent"
        android:text="Pick Your Model"
        android:textSize="20sp"
        android:paddingLeft="15dp"
        android:textColor="#faf8f8"
        android:gravity="center_vertical" />


    <TextView
        android:layout_width="35dp"
        android:text="3"
        android:textColor="#c2bbbb"
        android:gravity="center"
        android:textSize="30sp"
        android:layout_gravity="center"
        android:layout_marginLeft="15dp"

        android:layout_height="35dp" />



</LinearLayout>

<android.support.v7.widget.RecyclerView
    android:layout_width="fill_parent"
    android:id="@+id/ls"
    android:layout_below="@+id/headermodel"
    android:layout_height="fill_parent">

</android.support.v7.widget.RecyclerView>

 </RelativeLayout>

row_model.xml

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical">



    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_margin="10dp"
        android:layout_marginStart="40dp"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/carBrandImg"
            android:layout_width="70dp"
            android:layout_height="match_parent" />

        <TextView
            android:id="@+id/carBrandName"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_vertical"
            android:paddingLeft="20dp"
            android:text="Renault"
            android:textColor="#2e2727"
            android:textSize="20sp" />
    </LinearLayout>
</LinearLayout>

这是代码:)请随意使用它

using System.Collections.Generic;
using Android.Content;
using Android.OS;
using Android.Views;
using Android.Widget;
using SupportFragment = Android.Support.V4.App.Fragment;
using Android.Support.V7.Widget;
using Android.Util;
using Newtonsoft.Json;
using BusinessLogic;
using BusinessObject;
using System;
using Android.Graphics;

namespace RBOS_2._0._1
{
  class Fragment_Cashflow : SupportFragment
  {
    //local variable declaration

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

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Inflate recyclerView for this Fragment
        RecyclerView recyclerView = inflater.Inflate(Resource.Layout.RecyclerView, container, false) as RecyclerView;

        // Start Recycler View
        SetUpRecyclerView(recyclerView);

        return recyclerView;
    }

    /// <summary>
    /// Setting up recyclerView
    /// </summary>
    /// <param name="recyclerView">recyclerView</param>
    private void SetUpRecyclerView(RecyclerView recyclerView)
    {
        recyclerView.SetLayoutManager(new LinearLayoutManager(recyclerView.Context));
        recyclerView.SetAdapter(new SimpleStringRecyclerViewAdapter()); 
        //this depends on how you use it (with or without arguments)
        //it is for your adapter

        recyclerView.SetItemClickListener((rv, position, view) =>
        {
        });
    }

    /// <summary>
    /// Implements the three required method overrides
    /// </summary>
    public class SimpleStringRecyclerViewAdapter : RecyclerView.Adapter
    {
        private readonly TypedValue mTypedValue = new TypedValue();

        //this is a sample variable declaration i nside adapter
        private int mBackground;
        private List<string> mDate;
        private List<string> mStatus;
        //until here

        //constructor
        public SimpleStringRecyclerViewAdapter()
        {
            context.Theme.ResolveAttribute(Resource.Attribute.selectableItemBackground, mTypedValue, true);
            mBackground = mTypedValue.ResourceId;
        }

        /// <summary>
        /// Gets the count of Values
        /// </summary>
        public override int ItemCount
        {
            get { return mDate.Count; }
        }

        /// <summary>
        /// Directly deals with the data.
        /// </summary>
        /// <param name="holder">holder</param>
        /// <param name="position">position</param>
        public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
        {
            var simpleHolder = holder as SimpleViewHolder;

            simpleHolder.mTxtViewDate.Text = DateTime.Now;
            simpleHolder.mTxtViewStatus.Text = "Status ";      
            //you can use the local variables if you want.             
        }

        /// <summary>
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="viewType"></param>
        /// <returns></returns>
        public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            View view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.YourLayout, parent, false);
            view.SetBackgroundResource(mBackground);

            return new SimpleViewHolder(view);
        }
    }

    /// <summary>
    /// Locates, holds and caches the view references from the resources.
    /// </summary>
    public class SimpleViewHolder : RecyclerView.ViewHolder
    {
        public readonly View mView;
        public readonly TextView mTxtViewDate;
        public readonly TextView mTxtViewStatus;

        /// <summary>
        /// Finding View and TextView and creating an Instance in C#
        /// </summary>
        /// <param name="view">view</param>
        public SimpleViewHolder(View view) : base(view)
        {
            mView = view;
            mTxtViewDate = view.FindViewById<TextView>(Resource.Id.entry_date);
            mTxtViewStatus = view.FindViewById<TextView>(Resource.Id.entry_status);
        }
    }
  }
}
使用System.Collections.Generic;
使用Android.Content;
使用Android.OS;
使用Android.Views;
使用Android.Widget;
使用SupportFragment=Android.Support.V4.App.Fragment;
使用Android.Support.V7.Widget;
使用Android.Util;
使用Newtonsoft.Json;
使用业务逻辑;
使用BusinessObject;
使用制度;
使用Android.Graphics;
命名空间RBOS_2._0._1
{
类片段\现金流:SupportFragment
{
//局部变量声明
创建时公共覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
}
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态)
{
//为该碎片的回收视图充气
RecyclerView RecyclerView=充气机。充气(Resource.Layout.RecyclerView,container,false)为RecyclerView;
//启动回收器视图
设置回收视图(回收视图);
返回回收视图;
}
/// 
///设置recyclerView
/// 
///回收视图
私有void设置回收视图(回收视图回收视图)
{
SetLayoutManager(新的LinearLayoutManager(recyclerView.Context));
SetAdapter(新的SimpleStringRecycleServiceAdapter());
//这取决于您如何使用它(带或不带参数)
//这是给你的适配器的
recyclerView.SetItemClickListener((rv、位置、视图)=>
{
});
}
/// 
///实现三个必需的方法重写
/// 
公共类SimpleStringRecycleServiceAdapter:RecyclerView.Adapter
{
私有只读类型值mTypedValue=新类型值();
//这是nside适配器的变量声明示例
私人国际mBackground;
私有列表mDate;
私人名单;
//直到这里
//建造师
公共SimpleStringRecycleServiceAdapter()
{
context.Theme.ResolveAttribute(Resource.Attribute.selectableItemBackground,mTypedValue,true);
mBackground=mTypedValue.ResourceId;
}
/// 
///获取值的计数
/// 
公共覆盖int ItemCount
{
获取{return mDate.Count;}
}
/// 
///直接处理数据。
/// 
///持有者
///位置
公共覆盖无效OnBindViewHolder(RecyclerView.ViewHolder,int位置)
{
var simpleHolder=作为SimpleViewHolder的持有人;
simpleHolder.mTxtViewDate.Text=DateTime.Now;
simpleHolder.mTxtViewStatus.Text=“状态”;
//如果需要,可以使用局部变量。
}
/// 
/// 
/// 
/// 
/// 
public override RecyclerView.ViewHolder OnCreateViewHolder(视图组父级,int-viewType)
{
View-View=LayoutFlater.From(parent.Context)。充气(Resource.Layout.YourLayout,parent,false);
视图.SetBackgroundResource(mBackground);
返回新的SimpleView文件夹(视图);
}
}
/// 
///从资源中查找、保存和缓存视图引用。
/// 
公共类SimpleView文件夹:RecyclerView.ViewHolder
{
公共只读视图mView;
公共只读文本视图mTxtViewDate;
公共只读文本视图mTxtViewStatus;
/// 
///在C中查找视图和文本视图并创建实例#
/// 
///看法
公共SimpleView文件夹(视图):基本(视图)
{
mView=视图;
mTxtViewDate=view.FindViewById(Resource.Id.entry\u date);
mTxtViewStatus=view.findviewbyd(Resource.Id.entry_status);
}
}
}
}

您知道如何使用片段吗?或者fragment和recyclerview都有问题?是的,我知道如何使用fragment。我想在fragment中创建此recycler视图。我知道创建recycler视图很困难,所以我将尝试为您提供我的。我不知道其他人是否会因为我用勺子喂东西而讨厌我:我建议你读一本关于RecyclerView的教程,然后带着一些具体的问题回来。请先阅读一些博客和教程,然后再问一些真正基本的问题,掌握谷歌搜索,比如“如何创建RecyclerView android”等等。哦,对不起,我的错了。我忘了说这是一个c#代码:D,但我希望您可以从中学习。您在那里遇到了一个错误,因为您试图接受List itemsData=ItemData[]itemsData中的数组值。我无法复制它,因为我是在xamarin中编译的。但我仍然可以调试,不用担心:)
using System.Collections.Generic;
using Android.Content;
using Android.OS;
using Android.Views;
using Android.Widget;
using SupportFragment = Android.Support.V4.App.Fragment;
using Android.Support.V7.Widget;
using Android.Util;
using Newtonsoft.Json;
using BusinessLogic;
using BusinessObject;
using System;
using Android.Graphics;

namespace RBOS_2._0._1
{
  class Fragment_Cashflow : SupportFragment
  {
    //local variable declaration

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

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Inflate recyclerView for this Fragment
        RecyclerView recyclerView = inflater.Inflate(Resource.Layout.RecyclerView, container, false) as RecyclerView;

        // Start Recycler View
        SetUpRecyclerView(recyclerView);

        return recyclerView;
    }

    /// <summary>
    /// Setting up recyclerView
    /// </summary>
    /// <param name="recyclerView">recyclerView</param>
    private void SetUpRecyclerView(RecyclerView recyclerView)
    {
        recyclerView.SetLayoutManager(new LinearLayoutManager(recyclerView.Context));
        recyclerView.SetAdapter(new SimpleStringRecyclerViewAdapter()); 
        //this depends on how you use it (with or without arguments)
        //it is for your adapter

        recyclerView.SetItemClickListener((rv, position, view) =>
        {
        });
    }

    /// <summary>
    /// Implements the three required method overrides
    /// </summary>
    public class SimpleStringRecyclerViewAdapter : RecyclerView.Adapter
    {
        private readonly TypedValue mTypedValue = new TypedValue();

        //this is a sample variable declaration i nside adapter
        private int mBackground;
        private List<string> mDate;
        private List<string> mStatus;
        //until here

        //constructor
        public SimpleStringRecyclerViewAdapter()
        {
            context.Theme.ResolveAttribute(Resource.Attribute.selectableItemBackground, mTypedValue, true);
            mBackground = mTypedValue.ResourceId;
        }

        /// <summary>
        /// Gets the count of Values
        /// </summary>
        public override int ItemCount
        {
            get { return mDate.Count; }
        }

        /// <summary>
        /// Directly deals with the data.
        /// </summary>
        /// <param name="holder">holder</param>
        /// <param name="position">position</param>
        public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
        {
            var simpleHolder = holder as SimpleViewHolder;

            simpleHolder.mTxtViewDate.Text = DateTime.Now;
            simpleHolder.mTxtViewStatus.Text = "Status ";      
            //you can use the local variables if you want.             
        }

        /// <summary>
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="viewType"></param>
        /// <returns></returns>
        public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            View view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.YourLayout, parent, false);
            view.SetBackgroundResource(mBackground);

            return new SimpleViewHolder(view);
        }
    }

    /// <summary>
    /// Locates, holds and caches the view references from the resources.
    /// </summary>
    public class SimpleViewHolder : RecyclerView.ViewHolder
    {
        public readonly View mView;
        public readonly TextView mTxtViewDate;
        public readonly TextView mTxtViewStatus;

        /// <summary>
        /// Finding View and TextView and creating an Instance in C#
        /// </summary>
        /// <param name="view">view</param>
        public SimpleViewHolder(View view) : base(view)
        {
            mView = view;
            mTxtViewDate = view.FindViewById<TextView>(Resource.Id.entry_date);
            mTxtViewStatus = view.FindViewById<TextView>(Resource.Id.entry_status);
        }
    }
  }
}