动态地在视图寻呼机的末尾和开始处添加视图

时间:2015-06-29 05:59:25

标签: android arraylist android-viewpager

最初我的ViewPager采取列表并相应地设置视图。但是,如果达到ViewPager的结尾或ViewPager的开头,我想向ViewPager添加更多视图并相应地设置位置,如何通过编写有效的代码来实现此目的?

这是我的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;
}`

这是自定义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) {

/ 这里我想从开始更新ArrayList提供给视图适配器 /

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

//这里我想从底部更新Arraylist,它提供给视图适配器

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

}

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

}

所以我需要更新提供给ViewPager的列表,以便在ViewPager到达结尾或开始时添加动态视图。

我正在添加这样的视图,我认为这是一种错误的方法

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);
}

1 个答案:

答案 0 :(得分:1)

我为Googles viewPager示例制作了一些内容,以保持简单, 通过单击片段上的按钮,您可以轻松地将页面增加到查看寻呼机。

这是我在这里展示的一个演示如何通知任何更改,因为您希望增加页面。你必须制作自己的自定义适配器和页面列表,以保持页面及其位置的检查...

对不起,我不会想要整个代码:(

使用以下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: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>

它的代码是

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();
}

}

主要活动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>

活动代码

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();
    }
}

}