Android 在片段中创建RecyclerView
我想在片段中的recyclerView中创建此UI,以及如何从其他片段调用。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>
它有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);
}
}
}
}