Ich habe eine Activity
mit einer ViewPager
und einen benutzerdefinierten Adapter, der die PagerAdaper
implementiert. Ich vergrößere eine Ansicht innerhalb der PagerAdapter
und Hinzufügen von Unteransichten zur übergeordneten Ansicht. Diese Unteransichten sind RadioGroup
, Checkboxes
, EditText
usw., abhängig von einem bestimmten Parameter des Objekts, dessen Liste ich an den Adapter übergebe.Erhalten Werte von Ansichten in einem PagerAdapter aufgeblasen
Ich möchte die Werte aus diesen Unteransichten erhalten, sobald die Seite geändert wird. Aber da mein Inflationscode im Adapter ist, muss ich wissen, wie ich den Seitenwechsel von meinem Adapter selbst erkennen kann.
Hier ist mein Code für den Adapter: -
public override Java.Lang.Object InstantiateItem(ViewGroup container, int position)
{
var view = voteFormActivity.LayoutInflater.Inflate(Resource.Layout.active_votes_layout, container, false);
txtvoteTitle = view.FindViewById<TextView>(Resource.Id.txtTitle);
//radioGroup = view.FindViewById<RadioGroup>(Resource.Id.radioGroupChoice);
btnSubmit = view.FindViewById<Button>(Resource.Id.btnSubmit);
layoutForcomponents = view.FindViewById<LinearLayout>(Resource.Id.layoutForComponents);
radioGroup = new RadioGroup(voteFormActivity);
var data = selectedVotes.ElementAt(position);
if (data != null)
{
if (!string.IsNullOrEmpty(data.Title))
{
txtvoteTitle.Text = data.Title;
}
var choiceList = data.Choices;
if (choiceList != null && choiceList.Count > 0)
{
if (checkParam == "RadioChoice")
{
foreach (var choice in choiceList)
{
RadioButton rButton = new RadioButton(voteFormActivity);
rButton.Text = choice;
radioGroup.AddView(rButton);
layoutForcomponents.RemoveAllViews();
layoutForcomponents.AddView(radioGroup);
}
}
else if (checkParam == "CheckBoxChoice")
{
foreach (var choice in choiceList)
{
CheckBox cButton = new CheckBox(voteFormActivity);
cButton.Text = choice;
radioGroup.AddView(cButton);
layoutForcomponents.RemoveAllViews();
layoutForcomponents.AddView(radioGroup);
}
}
}
//if (checkParam == "MultiLineText")
else{
EditText etMultilineText = new EditText(voteFormActivity);
etMultilineText.Hint = "Enter feedback";
etMultilineText.SetLines(6);
layoutForcomponents.RemoveAllViews();
layoutForcomponents.AddView(etMultilineText);
}
}
container.AddView(view);
return view;
}
ich den Adapter an meine ViewPager passieren, wie folgt: -
mViewPager.Adapter = new PollViewPagerAdapter(this, this.FragmentManager, AppHelper.SelectedVotes);
Wie kann ich den Seitenwechsel erkennen und die Werte erhalten aus die RadioGroup
, Checkbox
und EditText
? Jede Hilfe wird geschätzt.
Es gibt einen 'ViewPager.onPageChangeListener', den Sie an den Viewpager anhängen. Wolltest du das? Ich kann es als Antwort hinzufügen, wenn das so ist – RobVoisey
@RobVoisey 'ViewPager.onPageChangeListener' muss auf die Aktivität angewendet werden, aber die Werte, die ich brauche, sind im' PagerAdapter' aufgeblasen, wie kann ich diese Werte bekommen, wenn sich die Seite ändert? – user3034944
Können Sie die Ansichten nicht einfach als Felder in Ihrer Klasse speichern? 'ViewPager.onPageChangeListener' lässt Sie wissen, wenn die Seite aktualisiert wurde und Sie können die aktuell angezeigte Seite sehen, dann wissen Sie, welche Ansichtsfelder verwendet werden sollen. – RobVoisey