[英]How can I add a fragment to a ViewPager? addView crashes my app
我正在使用Android啟動新Android應用程序時啟動的默認滑動選項卡片段代碼。 我已經弄清楚如何修改我的數據並使用選項卡,但我還沒弄清楚如何將一個簡單的片段添加到已經存在的內容中。 我想在標簽的頂部或正下方添加一個信息欄。 我確定這很簡單,我只是無法弄清楚怎么哈哈。 我通過例子學習。
我已經嘗試為viewpager添加一個視圖,但我的應用程序崩潰了,我相信我做錯了。
在我的MainActivity中:...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Set up the action bar.
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mSectionsPagerAdapter = new SectionsPagerAdapter(
getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
SubBarFragment infobar = new SubBarFragment();
mViewPager.addView(infobar.getView());
.....[extra code for menus and things]
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
....[code to show specific tabs and return the tab's fragment]
infobarfragment.java
public class InfobarFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.infobar, container, false);
return view;
}
}
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" />
infobar.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_wifi" />
<TextView
android:id="@+id/statusText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Wifi Status Information" />
</LinearLayout>
你可以遵循這種方法:
只需在尋呼機中為每個視圖使用片段。
在FragmentActivity
onCreate()
方法中編寫以下代碼。
List<Fragment> fragments = new Vector<Fragment>();
//for each fragment you want to add to the pager
Bundle page = new Bundle();
page.putString("url", url);
fragments.add(Fragment.instantiate(this,MyFragment.class.getName(),page));
//after adding all the fragments write the below lines
this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments);
mPager.setAdapter(this.mPagerAdapter);
樣本片段定義:
public class MyFragment extends Fragment {
public static MyFragment newInstance(String imageUrl) {
final MyFragment mf = new MyFragment ();
final Bundle args = new Bundle();
args.putString("somedata", "somedata");
mf.setArguments(args);
return mf;
}
public MyFragment() {}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String data = getArguments().getString("somedata");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate and locate the main ImageView
final View v = inflater.inflate(R.layout.my_fragment_view, container, false);
//...
return v;
}
FragmentPagerAdapter
public class MyFragmentAdapter extends FragmentPagerAdapter {
public static int pos = 0;
private List<Fragment> myFragments;
public MyFragmentAdapter(FragmentManager fm, List<Fragment> myFrags) {
super(fm);
myFragments = myFrags;
}
@Override
public Fragment getItem(int position) {
return myFragments.get(position);
}
@Override
public int getCount() {
return myFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
setPos(position);
String PageTitle = "";
switch(pos)
{
case 0:
PageTitle = "page 1";
break;
case 1:
PageTitle = "page 2";
break;
case 2:
PageTitle = "page 3";
break;
case 3:
PageTitle = "page 4";
break;
case 4:
PageTitle = "page 5";
break;
case 5:
PageTitle = "page 6";
break;
case 6:
PageTitle = "page 7";
break;
}
return PageTitle;
}
public static int getPos() {
return pos;
}
public static void setPos(int pos) {
MyFragmentAdapter.pos = pos;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.