@tatebn - Hi, I desperately needed this post! But as yours seems to be
an internal web view, mine is an external file on the SD-Card. I'm
trying to read it using this,
BufferedReader in = new BufferedReader(new FileReader("/sdcard/
TextFiles/post.txt"));
And I cannot further decide how to split the content into different
page views so that they can be added to the addView method. Let me
know if you have a solution or guide me elsewhere.
P.S. I'm new to Android.
On Feb 8, 9:05 pm, tatebn <[email protected]> wrote:
> I ended up getting this solved as follows.
>
> I basically just created a new adapter every time the data set needed
> to change and replaced the adapter for the view pager.
>
> InternalContentAdapter adapter = new InternalContentAdapter();
> adapter.loadContents(someContentList);
> this.internalContentPager.setAdapter(adapter);
>
> This is my pager adapter. I'm using internal web views as my views.
> This probably isn't the best explanation (or implementation) but it
> works for me. Let me know if you have any questions.
>
> /**
> * Pager Adapter to handle internal web view pages. This drives
> the swipe navigation for the internal content.
> *
> * @author btate
> *
> */
> private class InternalContentAdapter extends PagerAdapter{
>
> /** The content objects represented by this pager. */
> private List<Content> contents;
>
> /** The starting position. */
> private int startPosition = 0;
>
> /** The starting content id. */
> private String startContentId = null;
>
> /** Flag for whether or not to set the starting position. */
> private boolean setPrimary = true;
>
> @Override
> public int getCount() {
> // Send back the contents size
> return this.contents.size();
> }
>
> /**
> * Create the page for the given position. The adapter is
> responsible
> * for adding the view to the container given here, although it
> only
> * must ensure this is done by the time it returns from
> * {@link #finishUpdate()}.
> *
> * @param container The containing View in which the page will be
> shown.
> * @param position The page position to be instantiated.
> * @return Returns an Object representing the new page. This
> does not
> * need to be a View, but can be some other container of the
> page.
> */
> @Override
> public Object instantiateItem(ViewGroup container, int
> position) {
>
> // Load up the page
> InternalWebView page = new InternalWebView(ctx, repo);
>
> page.loadInternalPage(this.contents.get(position).getContentId());
> page.setInternalWebViewListener(getListener());
>
> //this.parentActivity.registerForContextMenu(page);
>
> // Need to add this without the position
> container.addView(page);
>
> return page;
> }
>
> /**
> * Remove a page for the given position. The adapter is
> responsible
> * for removing the view from its container, although it only
> must ensure
> * this is done by the time it returns from {@link
> #finishUpdate()}.
> *
> * @param container The containing View from which the page will
> be removed.
> * @param position The page position to be removed.
> * @param object The same object that was returned by
> * {@link #instantiateItem(View, int)}.
> */
> @Override
> public void destroyItem(View container, int position, Object
> view) {
> ((ViewPager) container).removeView((InternalWebView)
> view);
> }
>
> @Override
> public boolean isViewFromObject(View view, Object object) {
> return view==((InternalWebView)object);
> }
>
> /**
> * Called when the a change in the shown pages has been
> completed. At this
> * point you must ensure that all of the pages have actually been
> added or
> * removed from the container as appropriate.
> * @param container The containing View which is displaying this
> adapter's
> * page views.
> */
> @Override
> public void finishUpdate(ViewGroup container) {
>
> // Set primary flag set to false after all data loaded
> if(this.setPrimary)
> // Set the current item
>
> internalContentPager.setCurrentItem(this.startPosition);
>
> this.setPrimary = false;
>
> }
>
> @Override
> public void restoreState(Parcelable arg0, ClassLoader arg1) {}
>
> @Override
> public Parcelable saveState() {
> return null;
> }
>
> @Override
> public void startUpdate(ViewGroup container) {
>
> }
>
> /**
> * Set the contents for the view pager.
> *
> * @param contents A List of Content objects to be
> loaded.
> * @param startPosition The starting position
> */
> public void setContents(List<Content> contents, int
> startPosition){
> // Tells it to set the primary page
> this.setPrimary = true;
>
> // Set the contents
> this.contents = contents;
>
> // Figure out the start position for the finished
> update function
> if(this.startContentId != null){
> for(Content tmp : this.contents){
>
> if(this.startContentId != null &&
> this.startContent.equals(tmp.getContentId()))
> this.startPosition =
> this.contents.indexOf(tmp);
> }
> }
>
> this.notifyDataSetChanged();
> }
>
> }
>
> On Feb 7, 12:13 am, HeneryH <[email protected]> wrote:
>
>
>
>
>
>
>
> > tatebn, did you ever solve this problem? I have been going crazy trying to
> > dynamically add views to aviewpagerbased on database items.
>
> > If I find one more sample with three statically defined views each adding a
> > textview with the index I will go crazy!
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en