Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 片段是否可以扩展片段?_Android_Android Fragments_Xamarin - Fatal编程技术网

Android 片段是否可以扩展片段?

Android 片段是否可以扩展片段?,android,android-fragments,xamarin,Android,Android Fragments,Xamarin,我对移动开发还不熟悉,我不确定这是否可行。我有一个片段,带有一个显示内容的循环视图。问题是其他片段也使用相同设计的回收器视图。是否可以扩展该片段,然后通过更改文本视图和图像重用其中的所有内容 片段代码: using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Json; using Android.Support.V4.App; using Android.Content

我对移动开发还不熟悉,我不确定这是否可行。我有一个片段,带有一个显示内容的循环视图。问题是其他片段也使用相同设计的回收器视图。是否可以扩展该片段,然后通过更改文本视图和图像重用其中的所有内容

片段代码:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Json;
using Android.Support.V4.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Support.V7.Widget;
using Android.Graphics;
using Homecheck.Adapters;
using Homecheck.Models;
using Newtonsoft.Json;

namespace Homecheck.Fragments {
    public class SmokeSensor : Fragment {
        private RecyclerView recyclerView;
        private RecyclerView.Adapter adapter;
        private RecyclerView.LayoutManager layoutManager;
        private List<ItemData> itemData;
        private ISharedPreferences pref;
        private SessionManager session;
        private DeviceModel deviceModel;
        private string cookie;
        private const string URL_SMOKE_DATA = "http://10.1.1.20/appapi/getsmokedata";

        public async override void OnStart() {
            base.OnStart();

            session = new SessionManager();
            pref = Activity.GetSharedPreferences("UserSession", FileCreationMode.Private);
            cookie = pref.GetString("PHPSESSID", string.Empty);
            var jsonFetcher = new JsonFetcher();
            JsonValue jsonDashboard = await jsonFetcher.FetchJsonAsync(URL_SMOKE_DATA, null, null, cookie);
            deviceModel = new DeviceModel();
            deviceModel = JsonConvert.DeserializeObject<DeviceModel>(jsonDashboard);

            AddSmokeData();

            adapter = new ViewAdapter(itemData);

            new System.Threading.Thread(new System.Threading.ThreadStart(() => {
                Activity.RunOnUiThread(() => {
                    recyclerView.SetAdapter(adapter);
                });
            })).Start();
        }

        public void AddSmokeData() {
            itemData = new List<ItemData>();

            foreach (SensorData sensorData in deviceModel.SensorData) {
                if (sensorData.Value == "1") {
                    itemData.Add(new ItemData() {
                        title = GetString(Resource.String.smoke_detected_text),
                        date = sensorData.Timestamp,
                        image = Resource.Drawable.smoke_red,
                    });
                }
            }
        }

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.Inflate(Resource.Layout.SmokeSensor, container, false);
            recyclerView = view.FindViewById<RecyclerView>(Resource.Id.smoke_recycler_view);
            recyclerView.HasFixedSize = true;
            layoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.Vertical);

            recyclerView.SetLayoutManager(layoutManager);
            recyclerView.SetItemAnimator(new DefaultItemAnimator());
            recyclerView.AddItemDecoration(new SpaceItemDecoration(20));

            return view;
        }

        public class SpaceItemDecoration : RecyclerView.ItemDecoration {
            private int space;

            public SpaceItemDecoration(int space) {
                this.space = space;
            }

            public override void GetItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
                outRect.Left = space;
                outRect.Right = space;
                outRect.Bottom = space;

                if (parent.GetChildAdapterPosition(view) == 0) {
                    outRect.Top = space;
                }
            }
        }

        public class ViewAdapter : RecyclerView.Adapter {
            private List<ItemData> itemData;
            private TextView titleText;
            private TextView dateText;
            private ImageView imageId;

            public ViewAdapter(List<ItemData> itemData) {
                this.itemData = itemData;
            }

            public class ItemView : RecyclerView.ViewHolder {
                public View mainView { get; set; }

                public TextView title { get; set; }

                public TextView date { get; set; }

                public ImageView image { get; set; }

                public ItemView(View view) : base(view) {
                    mainView = view;
                }
            }

            public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) {
                View itemLayoutView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.SmokeSensorItems, null);

                titleText = itemLayoutView.FindViewById<TextView>(Resource.Id.item_title);
                dateText = itemLayoutView.FindViewById<TextView>(Resource.Id.item_date);
                imageId = itemLayoutView.FindViewById<ImageView>(Resource.Id.item_icon);

                var viewHolder = new ItemView(itemLayoutView) { title = titleText, date = dateText, image = imageId };

                return viewHolder;
            }

            public override void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
                ItemView itemHolder = viewHolder as ItemView;

                itemHolder.title.Text = itemData[position].title;
                itemHolder.date.Text = itemData[position].date;
                itemHolder.image.SetImageResource(itemData[position].image);
            }

            public override int ItemCount {
                get { return itemData.Count; }
            }
        }

        public class ItemData {
            public string title { get; set; }

            public string date { get; set; }

            public int image { get; set; }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Threading.Tasks;
使用System.Json;
使用Android.Support.V4.App;
使用Android.Content;
使用Android.Runtime;
使用Android.Views;
使用Android.Widget;
使用Android.OS;
使用Android.Support.V7.Widget;
使用Android.Graphics;
使用Homecheck.Adapters;
使用Homecheck.Models;
使用Newtonsoft.Json;
命名空间Homecheck.Fragments{
公共类烟雾传感器:碎片{
私人回收站;
专用循环视图适配器;
private RecyclerView.LayoutManager LayoutManager;
私有列表项数据;
私人iSharedReferences优先;
私人会话管理器会话;
私有设备模型设备模型;
私有字符串cookie;
私有常量字符串URL\u烟雾\u数据=”http://10.1.1.20/appapi/getsmokedata";
公共异步重写void OnStart(){
base.OnStart();
会话=新建会话管理器();
pref=Activity.getSharedReferences(“UserSession”,FileCreationMode.Private);
cookie=pref.GetString(“PHPSESSID”,string.Empty);
var jsonFetcher=new jsonFetcher();
JsonValue JSONDASHORD=等待jsonFetcher.FETCHJSONASSYNC(URL\u SMOKE\u数据,null,null,cookie);
deviceModel=新的deviceModel();
deviceModel=JsonConvert.DeserializeObject(jsonDashboard);
AddSmokeData();
适配器=新的ViewAdapter(itemData);
新System.Threading.Thread(新System.Threading.ThreadStart(()=>{
Activity.RunOnUiThread(()=>{
recyclerView.SetAdapter(适配器);
});
})).Start();
}
public void AddSmokeData(){
itemData=新列表();
foreach(设备模型中的传感器数据传感器数据传感器数据){
如果(sensorData.Value==“1”){
添加(新的itemData(){
title=GetString(Resource.String.smoke\u detected\u text),
日期=传感器数据。时间戳,
image=Resource.Drawable.smoke\u red,
});
}
}
}
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(Resource.Layout.smoke传感器,容器,false);
recyclerView=view.FindViewById(Resource.Id.smoke\u recycler\u视图);
recyclerView.HasFixedSize=true;
layoutManager=新的StaggedGridLayoutManager(3,StaggedGridLayoutManager.Vertical);
recyclerView.SetLayoutManager(layoutManager);
SetItemAnimator(新的DefaultItemAnimator());
recyclerView.AddItemDecoration(新SpaceItemDecoration(20));
返回视图;
}
公共类SpaceItemDecoration:RecyclerView.ItemDecoration{
私有int空间;
公共空间项目装饰(内部空间){
这个空间=空间;
}
公共覆盖void getItemOffset(Rect outRect、视图视图、RecyclerView父级、RecyclerView.State){
outRect.Left=空间;
outRect.Right=空间;
outRect.Bottom=空间;
if(parent.GetChildAdapterPosition(视图)==0){
outRect.Top=空间;
}
}
}
公共类ViewAdapter:RecyclerView.Adapter{
私有列表项数据;
私有文本视图标题文本;
私有文本查看日期文本;
私有ImageView imageId;
公共ViewAdapter(列表项数据){
this.itemData=itemData;
}
公共类ItemView:RecyclerView.ViewHolder{
公共视图主视图{get;set;}
公共文本视图标题{get;set;}
公共文本视图日期{get;set;}
公共图像视图图像{get;set;}
公共项目视图(视图):基本(视图){
主视图=视图;
}
}
public override RecyclerView.ViewHolder OnCreateViewHolder(视图组父级,int-viewType){
View itemLayoutView=LayoutFlater.From(parent.Context).充气(Resource.Layout.SmokeSensorItems,null);
titleText=itemLayoutView.findviewbyd(Resource.Id.item\u title);
dateText=itemLayoutView.FindViewById(Resource.Id.item\u日期);
imageId=itemLayoutView.findviewbyd(Resource.Id.item_图标);
var viewHolder=newitemview(itemLayoutView){title=titleText,date=dateText,image=imageId};
返回视图持有者;
}
公共覆盖无效OnBindViewHolder(RecyclerView.ViewHolder ViewHolder,int位置){
ItemView itemHolder=作为ItemView的viewHolder;
itemHolder.title.Text=itemData[位置].title;
itemHolder.date.Text=itemData[position]。日期;
itemHolder.image.SetImageResource(itemData[position].image);
}
公共覆盖int ItemCount{
获取{return itemData.Count;}
}
}
公共类ItemData{
公共字符串标题{get;set;}
公共字符串日期{get;set;}
公共int映像{get;set;}
}
}
}

我已经更改了这个答案,您可以扩展片段。我从来没见过这样做