C# 领域更新Seekbar
我正在使用Realm保存我的seekbar更新 我有一个RecyclerView,在RecyclerView中添加X项手册, 在项目中有用户的设置,我希望每个项目的设置分开C# 领域更新Seekbar,c#,android,xamarin,xamarin.android,realm,C#,Android,Xamarin,Xamarin.android,Realm,我正在使用Realm保存我的seekbar更新 我有一个RecyclerView,在RecyclerView中添加X项手册, 在项目中有用户的设置,我希望每个项目的设置分开 public static BottomSheet_Faecher newInstance(String mString) { BottomSheet_Faecher f = new BottomSheet_Faecher(); Bundle args = new Bundle
public static BottomSheet_Faecher newInstance(String mString)
{
BottomSheet_Faecher f = new BottomSheet_Faecher();
Bundle args = new Bundle();
args.PutString("string", mString);
f.Arguments = args;
return f;
}
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
mString = Arguments.GetString("string");
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View v = inflater.Inflate(Resource.Layout.Settings_Faecher_Wertung, container, false);
Fach1 = v.FindViewById<SeekBar>(Resource.Id.seek1);
Fach2 = v.FindViewById<SeekBar>(Resource.Id.seek2);
var prefs = PreferenceManager.GetDefaultSharedPreferences(this.Activity);
bool previouslyStarted = prefs.GetBoolean("first", false);
string name = name = Arguments.GetString("Name");
Ad = realm.All<SAd>().Where(m => m.mName == name).First();
if (!previouslyStarted)
{
wertungen = new HNWertung { HWertung = Fach1.Progress, NhWertung = Fach2.Progress };
realm.Write(() =>
{
Ad.mWertunglist.Add(wertungen);
});
var edit = prefs.Edit();
edit.PutBoolean("first", true);
edit.Commit();
}
var test = realm.All<HNWertung>().First();
Fach1.Progress = test.HauptfachWertung;
Fach2.Progress = test.NebenfachWertung;
//Fach1.Progress = L;
//Fach2.Progress = ListWertung.NebenfachWertung;
Fach1.ProgressChanged += Fach1_ProgressChanged;
Fach2.ProgressChanged += Fach2_ProgressChanged;
return v;
}
private void Fach2_ProgressChanged(object sender, SeekBar.ProgressChangedEventArgs e)
{
Fach1.Progress = 100 - e.Progress;
}
private void Fach1_ProgressChanged(object sender, SeekBar.ProgressChangedEventArgs e)
{
Fach2.Progress = 100 - e.Progress;
}
public override void OnDestroy()
{
base.OnDestroy();
}
publicstaticbottomsheet\u faechernewinstance(stringmstring)
{
底板f=新底板f=新底板f();
Bundle args=新Bundle();
args.PutString(“string”,mString);
f、 参数=args;
返回f;
}
创建时公共覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
mString=Arguments.GetString(“字符串”);
}
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态)
{
视图v=充气机。充气(Resource.Layout.Settings\u Faecher\u Wertung,container,false);
Fach1=v.findviewbyd(Resource.Id.seek1);
Fach2=v.findviewbyd(Resource.Id.seek2);
var prefs=PreferenceManager.getDefaultSharedReferences(this.Activity);
bool previouslyStarted=prefs.GetBoolean(“first”,false);
string name=name=Arguments.GetString(“name”);
Ad=realm.All(),其中(m=>m.mName==name.First();
如果(!先前启动)
{
wertungen=new HNWertung{HWertung=Fach1.Progress,NhWertung=Fach2.Progress};
realm.Write(()=>
{
Ad.mWertunglist.Add(wertungen);
});
var edit=prefs.edit();
edit.PutBoolean(“第一个”,true);
edit.Commit();
}
var test=realm.All().First();
Fach1.进度=test.HauptfachWertung;
Fach2.进度=test.NebenfachWertung;
//Fach1.进度=L;
//Fach2.Progress=ListWertung.NebenfachWertung;
Fach1.ProgressChanged+=Fach1_ProgressChanged;
Fach2.ProgressChanged+=Fach2\u ProgressChanged;
返回v;
}
私有void Fach2\u ProgressChanged(对象发送方,请参阅kbar.ProgressChangedEventArgs e)
{
Fach1.进度=100-e.进度;
}
私有void Fach1_ProgressChanged(对象发送方,请参阅kbar.ProgressChangedEventArgs e)
{
Fach2.进度=100-e.进度;
}
公共覆盖无效OnDestroy()
{
base.ondestory();
}
片段销毁后,我如何更新/保存进度
我怎样才能达到最新的进度
//编辑
public class StufeAdapter : RecyclerView.Adapter
{
public event EventHandler<int> ItemClick;
private RecyclerView mRecyclerView;
private List<StufeAd> mStufenListe;
Realm realm = Realm.GetInstance();
public StufeAdapter(List<StufeAd> stufenListe, RecyclerView recyclerView)
{
mStufenListe = stufenListe;
mRecyclerView = recyclerView;
}
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
var viewholder = holder as StufeViewHolder;
viewholder.StufenPhoto.SetImageResource(mStufenListe[position].mPhoto);
viewholder.Stufe.Text = mStufenListe[position].mName;
viewholder.Durchschnitt.Text = mStufenListe[position].mDurchschnitt.ToString();
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
View view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.CardView_Stufe_Row, parent, false);
StufeViewHolder vh = new StufeViewHolder(view, OnClick);
return vh;
}
public override int ItemCount
{
get
{
return mStufenListe.Count;
}
}
public类StufeAdapter:RecyclerView.Adapter
{
公共事件事件处理程序项单击;
私人回收视图mRecyclerView;
私人名单mStufenListe;
Realm Realm=Realm.GetInstance();
公共StufeAdapter(列出stufenListe、RecyclerView和RecyclerView)
{
mStufenListe=stufenListe;
mRecyclerView=回收视图;
}
公共覆盖无效OnBindViewHolder(RecyclerView.ViewHolder,int位置)
{
var viewholder=作为STUFEIEWHOLDER的持有人;
viewholder.StufenPhoto.SetImageResource(mStufenListe[position].mPhoto);
viewholder.Stufe.Text=mStufenListe[position].mName;
viewholder.durchchnitt.Text=mStufenListe[position].mdurchschnit.ToString();
}
public override RecyclerView.ViewHolder OnCreateViewHolder(视图组父级,int-viewType)
{
视图=LayoutFlater.From(parent.Context).充气(Resource.Layout.CardView\u Stufe\u行,parent,false);
StufeViewHolder vh=新StufeViewHolder(视图,单击);
返回vh;
}
公共覆盖int ItemCount
{
得到
{
返回mStufenListe.Count;
}
}
//领域对象
public class StufeAd : RealmObject
{
[PrimaryKey]
public string mName { get; set; }
public int mPhoto { get; set; }
public int mDurchschnitt { get; set; }
public IList<HNWertung> mWertunglist { get; }
}
public class HNWertung : RealmObject
{
public int HauptfachWertung { get; set; }
public int NebenfachWertung { get; set; }
}
public类StufeAd:RealmObject
{
[主密钥]
公共字符串mName{get;set;}
公共int-mPhoto{get;set;}
public int mDurchschnitt{get;set;}
公共IList mWertunglist{get;}
}
公共类HNWERTONG:RealmObject
{
公共int HauptfachWertung{get;set;}
公共int NebenfachWertung{get;set;}
}
因此,假设您有一个类似以下内容的RecyclerView
:
我们可以创建一个匹配的RealmObject
来保存您的数据
RealmObject
:
我们可以创建一个RecyclerView.Adapter
,它从您的Realm
实例中提取数据,并将用户更改持久化到每个SeekBar
RecyclerView.Adapter
:
公共类RealmAdapter:RecyclerView.Adapter
{
境界;
IQueryable因此,假设您有一个类似以下内容的
回收视图
:
我们可以创建一个匹配的RealmObject
来保存您的数据
RealmObject
:
我们可以创建一个RecyclerView.Adapter
,它从您的Realm
实例中提取数据,并将用户更改持久化到每个SeekBar
RecyclerView.Adapter
:
公共类RealmAdapter:RecyclerView.Adapter
{
境界;
IQueryable是的,每个项目都应该有自己的两个seekbar。我添加了一个与您的recyclerview适配器数据匹配的答案。我想您理解错了。我的意思是,我有一个包含多个项目的recyclerview,在每个项目中我都有一个对话框,您可以在其中更改seekbar。因此seekbar不在回收器中,但我希望seek条形图是从RecyclerView连接到特定项的。这就是为什么我在这里得到该项
string name=name=Arguments.GetString(“name”);Ad=realm.All()。其中(m=>m.mName==name)。First();
相同的过程,每个SeekBar的进程必须在回收视图之前保存。ViewHolder
被回收,或者在片段被销毁之前保存,除非您先将该信息保存到其他地方。发布您的RealmObject
模型和适配器数据样本。好的,我添加埃德t
public class ARealmObject : RealmObject
{
[PrimaryKey] // Use Gap-less Primary keys for super fast RecyclerView, otherwise you have to create a "positional" RealmObject mapping
public int Key { get; set; } // zero-based for RecyclerView Adapter
public string Caption { get; set; }
public int SeekBar1 { get; set; }
public int SeekBar2 { get; set; }
}
public class RealmAdapter : RecyclerView.Adapter
{
Realm realm;
IQueryable<ARealmObject> realmobjects;
public RealmAdapter(RealmConfiguration config)
{
realm = Realm.GetInstance(config);
realmobjects = realm.All<ARealmObject>();
}
public class RealmObjectViewHolder : RecyclerView.ViewHolder
{
readonly Timer timer;
readonly Realm realm;
ARealmObject aRealmObject;
string lastCaption;
public RealmObjectViewHolder(View view, Realm realm) : base(view)
{
this.realm = realm;
Caption = view.FindViewById<TextView>(Resource.Id.realmTextView);
SeekBar1 = view.FindViewById<SeekBar>(Resource.Id.seekBar1);
SeekBar2 = view.FindViewById<SeekBar>(Resource.Id.seekBar2);
SeekBar1.StopTrackingTouch += SeekBar_HandleEventHandler;
SeekBar2.StopTrackingTouch += SeekBar_HandleEventHandler;
}
public TextView Caption { get; private set; }
public SeekBar SeekBar1 { get; private set; }
public SeekBar SeekBar2 { get; private set; }
public int Key
{
get { return aRealmObject.Key; }
set
{
aRealmObject = realm.Find<ARealmObject>(value);
aRealmObject = aRealmObject ?? new ARealmObject { Key = value, Caption = $"missing key : {value}", SeekBar1 = 50, SeekBar2 = 50 };
Caption.Text = aRealmObject.Caption;
lastCaption = Caption.Text;
SeekBar1.Progress = aRealmObject.SeekBar1;
SeekBar2.Progress = aRealmObject.SeekBar2;
}
}
void SeekBar_HandleEventHandler(object sender, SeekBar.StopTrackingTouchEventArgs e)
{
UpdateRealmObject();
}
void UpdateRealmObject()
{
if (aRealmObject.Caption != Caption.Text || aRealmObject.SeekBar1 != SeekBar1.Progress || aRealmObject.SeekBar2 != SeekBar2.Progress)
{
lastCaption = Caption.Text;
realm.Write(() =>
{
aRealmObject.SeekBar1 = SeekBar1.Progress;
aRealmObject.SeekBar2 = SeekBar2.Progress;
realm.Add(aRealmObject, true); // Using the optional update: parameter set to true
});
}
}
}
public override int ItemCount
{
get { return realmobjects.Count(); }
}
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
var vh = holder as RealmObjectViewHolder;
vh.Key = position;
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
var itemView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.ARealmObjectCardView, parent, false);
var vh = new RealmObjectViewHolder(itemView, realm);
return vh;
}
}
[Activity(Label = "RecyclerViewWithRealm", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
RecyclerView recyclerView;
RecyclerView.Adapter adapter;
RecyclerView.LayoutManager layoutManager;
Realm masterRealmInstance;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
masterRealmInstance = Realm.GetInstance("RecyclerViewExample.realm");
if (masterRealmInstance.All<ARealmObject>().Count() == 0)
{
masterRealmInstance.Write(() => // Create some test data
{
for (int i = 0; i < 10000; i++)
{
masterRealmInstance.Add(new ARealmObject { Key = i, Caption = $"StackOverFlow # + {i.ToString()}", SeekBar1 = 50, SeekBar2 = 50 });
}
});
}
SetContentView(Resource.Layout.ARecyclerLayOut);
recyclerView = (RecyclerView)FindViewById(Resource.Id.recyclerView);
recyclerView.HasFixedSize = true;
layoutManager = new LinearLayoutManager(this);
recyclerView.SetLayoutManager(layoutManager);
adapter = new RealmAdapter((RealmConfiguration)masterRealmInstance.Config);
recyclerView.SetAdapter(adapter);
}
}