J'ai un Activity
avec un ViewPager
et un adaptateur personnalisé qui implémente le PagerAdaper
. Je gonfle une vue à l'intérieur du PagerAdapter
et j'ajoute des sous-vues à la vue parente. Ces sous-vues sont RadioGroup
, Checkboxes
, EditText
etc. en fonction d'un certain paramètre de l'objet de la liste que je passe à l'adaptateur.Obtenir des valeurs de vues gonflées dans un PagerAdapter
Je souhaite obtenir les valeurs de ces sous-vues une fois la page modifiée. Mais puisque mon code d'inflation est dans l'adaptateur, j'ai besoin de savoir comment puis-je détecter le changement de page de mon adaptateur lui-même.
Voici mon code pour l'adaptateur: -
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;
}
Je passe l'adaptateur à mon ViewPager comme suit: -
mViewPager.Adapter = new PollViewPagerAdapter(this, this.FragmentManager, AppHelper.SelectedVotes);
Comment puis-je détecter le changement de page et d'obtenir les valeurs de les RadioGroup
, Checkbox
et EditText
? Toute aide est appréciée.
Il existe un 'ViewPager.onPageChangeListener 'que vous attachez au viewpager. Est-ce que c'est ce que tu cherchais? Je peux l'ajouter comme réponse si oui – RobVoisey
@RobVoisey 'ViewPager.onPageChangeListener' doit être appliqué à l'activité, mais les valeurs dont j'ai besoin sont gonflées dans' PagerAdapter', comment puis-je obtenir ces valeurs quand la page change? – user3034944
Ne pouvez-vous pas simplement stocker les vues sous forme de champs dans votre classe? 'ViewPager.onPageChangeListener' vous permet de savoir quand la page a été mise à jour et vous pouvez obtenir la page en cours d'affichage, alors vous saurez quels champs de vue à utiliser. – RobVoisey