So far I've been hacking together examples to get a feel for the APIs the Android SDK as a whole. However, I've hit an impasse.
I'm trying to Inflate a LinearLayout with 2 TextViews from an XML file. These will be then Views that are paged. I simply can't get this to work and realize that I totally don't understand what's going on with the code.
Looking at the source I can see that the method ViewPager.addNewItem calls the InstantiateItem from the supplied adapter. And addNewItem is called in populate()
. populate() is called in a number of other places.
Anyway, in the example, I've experienced that when the method is overridden for PagerAdapter one must include a call to addView()
on the ViewPager collection that is passed from the ViewPager
as an argument.
If I wish to add multiple views I thought this would be a case of calling addView() more than once but as instantiateItem() returns an Object to ViewPager (in the example I had it returns the view that it added) I don't know what to return. I've tried returning the inflated view and a number of other things.
Please, can someone explain what is happening here?
Much appreciated.
@Override public Object instantiateItem(View collection, int position) { layout = inflater.inflate(R.layout.animallayout, null); TextView tv = (TextView) layout.findViewById(R.id.textView1); tv.setText("1________________>" + position); TextView tv2 = (TextView) layout.findViewById(R.id.textView2); tv.setText("2________________>" + position); ((ViewPager) collection).addView(layout); return layout; }
I've recently implemented this and this is my instantiateItem
method (made it a bit minimal for readability.
@Override public Object instantiateItem(View collection, int position) { Evaluation evaluation = evaluations.get(position); View layout = inflater.inflate(R.layout.layout_evaluation, null); TextView evaluationSummary = (TextView) layout.findViewById(R.id.evaluation_summary); evaluationSummary.setText(evaluation.getEvaluationSummary()); ((ViewPager) collection).addView(layout); return layout; } @Override public void destroyItem(View collection, int position, Object view) { ((ViewPager) collection).removeView((View) view); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; }
So for the page that is displayed, I get the data from my evaluations
list using the position as the index. Then inflate the Layout
which has the views I will add my data too. Then I get the TextView
to set the evaluation summary text on. Then the whole Layout
is added to the ViewPager
. And finally the Layout
is also returned.
If you still can't get it post your code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With