[英]How pass fragment arguments while using a view pager with different fragments/layouts?
目標 :使用片段參數將字符串值從TextView
傳遞到新片段TextView
,但在FragmentPagerAdapter
使用具有不同layouts/fragments
的ViewPager
時。
問題 :新片段永遠不會從前一個片段接收片段參數。
我的設置 :我的Activity
托管了ViewPager
和FragmentPagerAdapter
。 我重寫了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
托管ViewPager
和FragmentPagerAdapter
的Activity
一個static
變量,我在每個fragments
不斷更新,我在fragment.newInstance(staticVariableInActivity)
方法中包含static
變量,但是這個似乎不起作用。 我也試過使用ViewPager
回調viewPager.setOnPageChangeListener()
我已經覆蓋了onPageSelected(int pos)
並嘗試在那里傳遞片段參數,但它沒有用......所以請幫助我!
我的想法 :我沒有在ArrayList
或任何列表中有不同的fragments
和layouts
,我只是通過newInstance()
方法實例化Fragments
,具體取決於FragementPagerAdapter
的位置,這可能是個問題嗎? 我應該創建layouts/fragments
的singleton
列表嗎? 所以我可以通過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.