Add dynamic view to end and start pager view

Mine first ViewPager

takes a list and sets the view accordingly. But if the end ViewPager

or the beginning is reached ViewPager

, I want to add more to ViewPager

and set positions accordingly, how can I do that by writing efficient code?

This is my Adapter

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

    // Declare Variables
    TouchImageView image;

    ImageEntity entity=list.get(position);
    final TextView text;


    inflater = (LayoutInflater)   context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View itemView = inflater.inflate(R.layout.viewpager_item, container,false);

    // Locate the TextViews in viewpager_item.xml
    image = (TouchImageView) itemView.findViewById(R.id.imageView1);
    View progress=itemView.findViewById(R.id.progress);
    text=(TextView) itemView.findViewById(R.id.text);
    text.setVisibility(View.INVISIBLE);
    text.setText(entity.message);
    makeTextViewResizable(text, 1, "View more", true);
    // Capture position and set to the TextViews
    image.setImageURI(Uri.parse(Constants.FLDR_IMG+entity.localImageName));
    ContextCommons.loadMainImage(context, entity, progress, image);
    // Add viewpager_item.xml to ViewPager
    container.addView(itemView);
    return itemView;
}`

      

This is custom ViewPager

public class CustomViewPager extends ViewPager{

float mStartDragX;
float x = 0;
OnSwipeOutListener mOnSwipeOutListener;
static final String TAG="CustomViewPager";

public CustomViewPager(Context context) {
    super(context);

}

public CustomViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public void setOnSwipeOutListener(OnSwipeOutListener listener) {
    mOnSwipeOutListener = listener;
}

private void onSwipeOutAtStart() {
    if (mOnSwipeOutListener!=null) {
        mOnSwipeOutListener.onSwipeOutAtStart();
    }
}

private void onSwipeOutAtEnd() {
    if (mOnSwipeOutListener!=null) {
        mOnSwipeOutListener.onSwipeOutAtEnd();
    }
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    switch(ev.getAction() & MotionEventCompat.ACTION_MASK){
        case MotionEvent.ACTION_DOWN:
            mStartDragX = ev.getX();
            break;
    }
    return super.onInterceptTouchEvent(ev);
}

@Override
public boolean onTouchEvent(MotionEvent ev){

    if(getCurrentItem()==0 || getCurrentItem()==getAdapter().getCount()-1){
        final int action = ev.getAction();
        float x = ev.getX();
        switch(action & MotionEventCompat.ACTION_MASK){
            case MotionEvent.ACTION_MOVE:
                break;
            case MotionEvent.ACTION_UP:
                if (getCurrentItem()==0 && x>mStartDragX) {

      

/ here I want to update ArrayList

from the beginning that comes to view the adapter /

                    ImageActivity.loadStart();
                }
                if (getCurrentItem()==getAdapter().getCount()-1 && x<mStartDragX){

      

// here I want to update the Arraylist from the bottom that comes with the adapter view

                    ImageActivity.loadEnd();
                }
                break;
        }
    }else{
        mStartDragX=0;
    }
    return super.onTouchEvent(ev);

}

public interface OnSwipeOutListener {
    void onSwipeOutAtStart();
    void onSwipeOutAtEnd();
}

      

}

So I need to update the list that comes in ViewPager

to add a dynamic view when it ViewPager

reaches the end or start.

I am adding an opinion that I believe is wrong.

public static void loadStart(){
    ArrayList<ImageEntity> image = null;
    try {
        ContextCommons.loadImages(context, Constants.DIRECTION_TOP, list.get(0).id);
        image= SelectQueries.getTopLocalImagesOnId(context, list.get(0).id, Constants.DIRECTION_TOP);
        list.addAll(0,image);
    } catch (Exception e) {
        e.printStackTrace();
    }

    viewPager.getAdapter().notifyDataSetChanged();
    viewPager.setCurrentItem(image.size()-1);
}

      

+3


source to share


1 answer


I made some editis for the example ViewPager for Googles to keep it simple, by clicking a button on a snippet, you can easily zoom pages to View Pager.

This is the demo I showed here how to notify anychanges how you want the pages to grow. you will need to create your own custom adapter and page list to hold the pages and check their position ...

Sorry, I wouldn't skip the whole code :(

Make a snippet with the following xml and code ...

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
>



<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_blank_fragment" />

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Button" />
</LinearLayout>

      

and the code is



import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

/**
 * A simple {@link Fragment} subclass.
 */
public class MyFragment extends Fragment {

private Button button;
private TextView textView;
private static AddPage test;


public MyFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View layout = inflater.inflate(R.layout.fragment_my, container, false);
    button = (Button) layout.findViewById(R.id.button);
    return layout;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            test.addAnotherPage();
        }
    });
}

public void setAddPage(AddPage addPage) {
    test = addPage;
}

public interface AddPage {
    void addAnotherPage();
}

}

      

Main activity xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".AddingPagesTest">

<android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>

      

Activity code

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;



public class AddingPagesTest extends AppCompatActivity {

public static int NUM_PAGES = 2;
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
private MyFragment set;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_adding_pages_test);

    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mPagerAdapter);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_adding_pages_test, menu);
    return true;
}



private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter implements MyFragment.AddPage {
    public ScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        MyFragment myFragment = new MyFragment();
        myFragment.setAddPage(this);
        return myFragment;
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }

    @Override
    public void addAnotherPage() {
        NUM_PAGES++;
        mPagerAdapter.notifyDataSetChanged();
    }
}

}

      

+1


source







All Articles