Android 无法刷新ViewPager内容

Android 无法刷新ViewPager内容,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,这段代码非常简单。我有一个内部有几个片段的ViewPager。和“添加新寻呼机”按钮,将新寻呼机添加到ViewPager的第一个位置 这是我的密码 public class TestPagerActivity extends SherlockFragmentActivity { private ArrayList<String> mData = new ArrayList<String>(); private ViewPager mPager;

这段代码非常简单。我有一个内部有几个片段的ViewPager。和“添加新寻呼机”按钮,将新寻呼机添加到ViewPager的第一个位置

这是我的密码

public class TestPagerActivity extends SherlockFragmentActivity {

    private ArrayList<String> mData = new ArrayList<String>();
    private ViewPager mPager;
    private TestPagerAdapter mAdapter;

    @Override
    protected void onCreate(Bundle b) {
        // TODO Auto-generated method stub
        super.onCreate(b);
        setContentView(R.layout.testpager);

        mData.add("Looking");
        mData.add("into");
        mData.add("your");
        mData.add("dark");
        mData.add("blue");
        mData.add("eyes");
        mPager = (ViewPager) findViewById(R.id.pager);
        mAdapter = new TestPagerAdapter(getSupportFragmentManager(), mData);
        mPager.setAdapter(mAdapter);
    }

    public void onAddNewPagerClick(View v) {
        mData.add(0, "When");
        mAdapter.notifyDataSetChanged();
        mPager.invalidate();
    }

    public static class TestPagerAdapter extends FragmentStatePagerAdapter {

        private List<String> mData;

        public TestPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        public TestPagerAdapter(FragmentManager fm, List<String> data) {
            super(fm);
            mData = data;
        }

        public void updateAdapter(List<String> data) {
            mData = data;
            notifyDataSetChanged();
        }

        @Override
        public Fragment getItem(int position) {
            return TestFragment.newInstance(mData.get(position), position + "/" + mData.size());
        }

        @Override
        public int getCount() {
            return mData.size();
        }

    }

    public static class TestFragment extends SherlockFragment {
        private static final String KEY_CONTENT = "TestFragment:Content";
        private static final String KEY_POSITION = "TestFragment:Position";

        public static TestFragment newInstance(String content, String position) {
            TestFragment fragment = new TestFragment();

            StringBuilder builder = new StringBuilder();
            builder.append("Page ").append(position).append("\n");
            for (int i = 0; i < 20; i++) {
                builder.append(content).append(" ");
            }
            builder.deleteCharAt(builder.length() - 1);
            fragment.mContent = builder.toString();

            return fragment;
        }

        private String mContent = "???";
        private String mPosition = "x/y";

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT)) {
                mContent = savedInstanceState.getString(KEY_CONTENT);
                mPosition = savedInstanceState.getString(KEY_POSITION);
            }
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            TextView text = new TextView(getActivity());
            text.setGravity(Gravity.CENTER);
            text.setText(mContent);
            text.setTextSize(20 * getResources().getDisplayMetrics().density);
            text.setPadding(20, 20, 20, 20);

            LinearLayout layout = new LinearLayout(getActivity());
            layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
            layout.setGravity(Gravity.CENTER);
            layout.addView(text);

            return layout;
        }

        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putString(KEY_CONTENT, mContent);
            outState.putString(KEY_POSITION, mPosition);
        }
    }
}
公共类TestPageActivity扩展了SherlockFragmentActivity{
private ArrayList mData=new ArrayList();
私人寻呼机;
私人测试页雷达;
@凌驾
创建时受保护的void(束b){
//TODO自动生成的方法存根
super.onCreate(b);
setContentView(R.layout.testpager);
mData.添加(“外观”);
mData.添加(“加入”);
mData.添加(“您的”);
mData.添加(“深色”);
mData.添加(“蓝色”);
mData.添加(“眼睛”);
mPager=(ViewPager)findViewById(R.id.pager);
mAdapter=newtestpageradapter(getSupportFragmentManager(),mData);
mPager.setAdapter(mAdapter);
}
在AddNewPagerClick(视图v)上的公共无效{
添加(0,“何时”);
mAdapter.notifyDataSetChanged();
mPager.invalidate();
}
公共静态类TestPagerAdapter扩展了FragmentStatePagerAdapter{
私有列表数据;
公共TestPagerAdapter(碎片管理器fm){
超级(fm);
}
公共TestPagerAdapter(碎片管理器fm,列表数据){
超级(fm);
mData=数据;
}
public void updateAdapter(列表数据){
mData=数据;
notifyDataSetChanged();
}
@凌驾
公共片段getItem(int位置){
返回TestFragment.newInstance(mData.get(position),position+“/”+mData.size());
}
@凌驾
public int getCount(){
返回mData.size();
}
}
公共静态类TestFragment扩展了SherlockFragment{
私有静态最终字符串KEY\u CONTENT=“TestFragment:CONTENT”;
私有静态最终字符串KEY\u POSITION=“TestFragment:POSITION”;
公共静态TestFragment newInstance(字符串内容、字符串位置){
TestFragment fragment=新的TestFragment();
StringBuilder=新的StringBuilder();
生成器.append(“页面”).append(位置).append(“\n”);
对于(int i=0;i<20;i++){
builder.append(content).append(“”);
}
builder.deleteCharAt(builder.length()-1);
fragment.mContent=builder.toString();
返回片段;
}
私有字符串mContent=“???”;
专用字符串mPosition=“x/y”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if((savedInstanceState!=null)&&savedInstanceState.containsKey(键内容)){
mContent=savedInstanceState.getString(键内容);
mPosition=savedInstanceState.getString(键位置);
}
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
TextView text=新的TextView(getActivity());
text.setGravity(Gravity.CENTER);
text.setText(mContent);
text.setTextSize(20*getResources().getDisplayMetrics().density);
设置填充(20,20,20,20);
LinearLayout布局=新的LinearLayout(getActivity());
layout.setLayoutParams(新的LayoutParams(LayoutParams.MATCH_父级,LayoutParams.MATCH_父级));
布局。设置重力(重心);
布局。添加视图(文本);
返回布局;
}
@凌驾
SaveInstanceState上的公共无效(束超出状态){
super.onSaveInstanceState(超出状态);
outState.putString(KEY_CONTENT,mContent);
outState.putString(键位置、位置);
}
}
}
问题是:当我在添加新页面后刷新ViewPager时,其内容无法正确显示。开始时,我有6页,但在添加了一个新页面后,这里仍然显示了6页,而我希望显示7页


谁能告诉我这里怎么了?感谢您的建议。

最突出的一点是,您在页面列表的前面插入了新项目,但您尚未实现PagerAdapter方法来告诉ViewPager在数据集更改后页面移动的位置。正如该方法的文档所述,默认实现报告页面从不改变位置。如果适配器未正确实现此方法,则带有更改位置页面的ViewPager将无法正常工作。

避免使用FragmentPagerAdapter,并使用FragmentStatePagerAdapter。

我希望它也能为你工作