[英]Passing ArrayList to Fragments
我有MainActivity有兩個片段(Tab1和Tab2)。 我通過XML解析2次從URL獲取數據,並在MainActivity中存儲在2個不同的ArrayList中。
這兩個片段有列表視圖。 現在我必須將1個Arraylist傳遞給一個片段並將第二個ArrayList傳遞給第二個片段,然后將這些ArrayList顯示到這兩個片段的ListViews中。
我如何將2個Arraylists傳遞給這兩個片段以及如何在這兩個片段中顯示它們。
這是MinActivity的創建方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadPage();
// Creating The Toolbar and setting it as the Toolbar for the activity
toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
// Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs.
adapter = new ViewPagerAdapter(getSupportFragmentManager(),Titles,Numboftabs);
// Assigning ViewPager View and setting the adapter
pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);
// Assiging the Sliding Tab Layout View
tabs = (SlidingTabLayout) findViewById(R.id.tabs);
tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width
// Setting Custom Color for the Scroll bar indicator of the Tab View
tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return getResources().getColor(R.color.tabsScrollColor);
}
});
// Setting the ViewPager For the SlidingTabsLayout
tabs.setViewPager(pager);
}
我在另一個函數(OnPostExecute)中有兩個ArrayList,我通過XML解析接收數據。
我沒有在兩個片段中編輯任何內容。 到目前為止,我只用List View創建這兩個片段
Fragment
有一個名為setArguments(Bundle)
。 Bundle
內置了對各種ArrayList
支持。 您只需使用您選擇的鍵將ArrayList
放入Bundle
。
但是,我建議你遵循newInstance(<parameters>)
模式,你的Fragment有一個static
newInstance()方法,該方法接受Fragment
所需的任何參數,在這種情況下是某種類型的ArrayList
。
引用官方Fragment文檔中的示例:
public static DetailsFragment newInstance(int index) {
DetailsFragment f = new DetailsFragment();
// Supply index input as an argument.
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
return f;
}
此Bundle
可以在以后(任何時間)檢索,但通常在onCreate()
或類似的情況下完成。 上面存儲的"index"
可以按如下方式檢索:
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
if (args != null) {
mIndex = args.getInt("index");
}
}
在上面的示例中,參數是一個int
,但是可以使用ArrayList
跟隨相同的邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.