簡體   English   中英

在使用具有不同片段/布局的視圖尋呼機時如何傳遞片段參數?

[英]How pass fragment arguments while using a view pager with different fragments/layouts?

目標 :使用片段參數將字符串值從TextView傳遞到新片段TextView ,但在FragmentPagerAdapter使用具有不同layouts/fragmentsViewPager時。

問題 :新片段永遠不會從前一個片段接收片段參數。

我的設置 :我的Activity托管了ViewPagerFragmentPagerAdapter 我重寫了FragmentPagerAdapters getItem(int position)方法,根據ViewPager的當前位置創建一個新的fragment實例。 現在我的適配器中只有兩個Fragments ,但是在克服這個障礙后會添加更多Fragments 我使用newInstance()技術傳遞Fragment的參數,但沒有傳遞任何東西。

相關代碼

我的FragmentPagerAdapter代碼:

//this is a variable that I pass in as the newInstanct() methods parameter,
// I update   this variable from my fragments constantly
public static String fragmentArgumentsValue = "";

mViewPager.setAdapter(new FragmentPagerAdapter(fm) {


            @Override
            public int getCount() {

                return NUMBER_OF_VIEWS;
            }

            @Override
            public Fragment getItem(int position) {
                switch (position) {
                case 0:
                    Log.d(TAG, "---In getPosition(), position 0---");

                    return Frag1
                            .newInstance(fragmentArgumentsValue);

                case 1:
                    Log.d(TAG, "---In getPosition(), position 1---");

                    return frag2
                            .newInstance(fragmentArgumentsValue);

                default:
                    Log.d(TAG, "---In getPosition(), DEFAULT---");

                    return frag1
                            .newInstance(fragmentArgumentsValue);
                }

            }
        });

其中一個片段newInstance()方法:

public static Fragment newInstance(String fragmentArgumentsValue) {
    Frag1 f = new Frag1();
    Bundle bun = new Bundle();
    bun.putString(KEY_FRAGMENT_ARGUMENTS_STRING, fragmentArgumentsValue);
    f.setArguments(bun);
    return f;
}

獲取片段參數:

String argString = getArguments().getString(
        KEY_FRAGMENT_ARGUMENTS_STRING);
if (argString.length() != 0) {
    Log.d(TAG, "Trying to set the frag args to:" + argString);
    mWorkingTextView.setText("" + argString);
} else {
    Log.d(TAG, "Couldn't set frag args to: " + argString);
}

我試過的 :我試過給ViewPager托管ViewPagerFragmentPagerAdapterActivity一個static變量,我在每個fragments不斷更新,我在fragment.newInstance(staticVariableInActivity)方法中包含static變量,但是這個似乎不起作用。 我也試過使用ViewPager回調viewPager.setOnPageChangeListener()我已經覆蓋了onPageSelected(int pos)並嘗試在那里傳遞片段參數,但它沒有用......所以請幫助我!

我的想法 :我沒有在ArrayList或任何列表中有不同的fragmentslayouts ,我只是通過newInstance()方法實例化Fragments ,具體取決於FragementPagerAdapter的位置,這可能是個問題嗎? 我應該創建layouts/fragmentssingleton列表嗎? 所以我可以通過singleton列表更改Fragments TextViews的值? (對不起,如果這是一個愚蠢或不可能的事情)。

注意 :我正在通過public void onSaveInstanceState(Bundle outState)保存TextViews值以處理屏幕旋轉。 這可能是個問題嗎?

好吧,所以我這個鏈接將有助於片段之間的溝通: 與其他片段的溝通

您需要定義一個Activity將實現的接口,並且片段將用於向前發送數據到活動,然后活動將按標簽找到片段,執行以下操作:

frag = (Fragment2) getSupportFragmentManager()
                    .findFragmentByTag(
                            "android:switcher:" + R.id.viewPager + ":2");

然后通過調用片段中實現的公共方法來更新片段。

提供的鏈接將有很大幫助,它來自Android開發網站。

在適配器中添加捆綁包。

適配器的構造函數中的示例:

      public ViewPagerAdapter(Context context, FragmentManager fm) {
        super(fm);
        fragments.add(TileFragments.newInstance());
        Bundle bundleFeatures = new Bundle();
        bundleFeatures.putString(ContentName.FEATURES.toString(),ContentName.FEATURES.toString());

        fragments.get(0).setArguments(bundleFeatures);

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM