23

私はこの問題を抱えてFragmentActivityViewPagerますViewPagerAdapter

この ViewPager には 3 つありFragments、それぞれに.TableLayout2dArrayList

レイアウトのボタンをクリックすると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();
    }
}

ご覧のとおり、mPagerAdapter.notifyDataSetChanged(); ここで提案されているとおりです。

ビューページャーで意図的にフラグメントを再作成するには?

このメソッドの最後に、アダプターがすべての を再作成することを期待していますFragmentが、onCreateViewいずれのフラグメントの from も実行されません。

誰でも私が間違っていることを提案できますか? 任意の支援をいただければ幸いです。

4

4 に答える 4

24

ViewPager7つのフラグメントを使用したときに同じ問題に直面したのと同じ問題にまだ直面している人のために。これらのフラグメントのデフォルトはサービスから英語のコンテンツをロードしますが、設定アクティビティから言語を変更したいという問題があり、設定アクティビティを終了した後ViewPager、メインアクティビティでフラグメントを更新してユーザーからの言語選択に一致させたいと考えています。ユーザーがここでアラビア語を選択した場合、アラビア語のコンテンツをロードします最初のtrrから作業するために行ったこと:D

1. FragmentStatePagerAdapter を使用する必要があります*

  1. mainActivity をオーバーライドしてonResume、次のことを行いました

     if (!(mPagerAdapter == null)) {
    
             mPagerAdapter.notifyDataSetChanged();
    
    
         }
    
  2. getItemPosition()inを無効にしてmPagerAdapter、POSITION_NONE を返すようにします。

     @Override
         public int getItemPosition(Object object) {
    
             return POSITION_NONE;
         }
    

魅力のように働く

于 2014-12-11T11:46:50.050 に答える
12

ここで @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;
}  
}

私の問題を修正しました。

私がしたことは、このメソッドを追加することでした:

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}  
于 2013-05-28T13:52:43.927 に答える