如何在ViewPager中重新创建所有片段:

Emi*_*Adz 15 android android-viewpager

我有这个问题,我有FragmentActivity一个ViewPager和一个ViewPagerAdapter.

在这个ViewPager中,我有3个Fragments,每个都包含一个TableLayout以编程方式使用a填充的2dArrayList.

单击FragmentActivity布局中的按钮,我过滤了数据,2dArrayList并且基本上需要Fragments使用新数据集重新创建所有3 (onCreateView在所有数据集中运行方法).

所以我onClickListener为这个按钮创建一个:

 private class SlicerSelectedOnClickListener implements OnClickListener {

    private ODSharedSlicer slicer;

    public SlicerSelectedOnClickListener(ODSharedSlicer slicer) {
        super();
        this.slicer = slicer;
    }

    public void onClick(View v) {
        String slicerValue = ((Button) v).getText().toString();
        Log.d(TAG,"Slicer value: "+ slicerValue +" chosen");
        application.currentReport.getODSharedSlicers().get(0).getSharedSlicerSelectedMemebers().add(slicerValue);

        ViewGroup parent = (ViewGroup) ((Button) v).getParent();

        for (int i = 0; i < parent.getChildCount(); i++) 
        {
            if ((parent.getChildAt(i) != v) && (parent.getChildAt(i) instanceof ToggleButton))
            {
                ((ToggleButton) parent.getChildAt(i)).setChecked(false);
            }
        }

        mPagerAdapter.notifyDataSetChanged();
    }
}
Run Code Online (Sandbox Code Playgroud)

如你所见,我有一个mPagerAdapter.notifyDataSetChanged(); As在这里建议:

如何故意用viewpager重新创建片段?

在这个方法结束时,所以我希望适配器重新创建所有的Fragments,但是onCreateView任何一个片段都不会运行.

任何人都可以建议我做错了什么.任何援助将不胜感激.

Zia*_*ish 20

对于那些仍然面临同样问题的人,当我有七个片段的viewpager时,我遇到了同样的问题.这些片段的默认值是从服务加载英语内容,但这里的问题是我想更改设置活动的语法,完成设置活动后我希望主活动中的viewpager刷新片段以匹配来自用户的语言选择如果用户在这里选择阿拉伯语,那么加载阿拉伯语内容我从第一个trr开始工作:D

1.你必须使用FragmentStatePagerAdapter*.

  1. mainActivity我覆盖了onResume并执行了以下操作

    if (!(mPagerAdapter == null)) {
    
            mPagerAdapter.notifyDataSetChanged();
    
    
        }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我在mPagerAdapter中删除了getItemPosition()并使其返回POSITION_NONE.

    @Override
        public int getItemPosition(Object object) {
    
            return POSITION_NONE;
        }
    
    Run Code Online (Sandbox Code Playgroud)

像魅力一样工作


Emi*_*Adz 10

正如@Luksprog所建议的那样,将我的适配器类更改为:

public class ViewPagerAdapter extends FragmentPagerAdapter 
{
private List<Fragment> fragments;

/**
 * @param fm
 * @param fragments
 */
public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
    super(fm);
    this.fragments = fragments;
}

/* (non-Javadoc)
 * @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
 */

@Override
public Fragment getItem(int position) {
    return this.fragments.get(position);
}

/* (non-Javadoc)
 * @see android.support.v4.view.PagerAdapter#getCount()
 */

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

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}  
}
Run Code Online (Sandbox Code Playgroud)

解决了我的问题.

我做的是添加这个方法:

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}  
Run Code Online (Sandbox Code Playgroud)

  • 我还需要将 `FragmentPagerAdapter` 更改为 `FragmentStatePagerAdapter` 才能工作 (2认同)