我有以下课程.首先是我的PagerAdapter:
package com.example.tab1;import androID.os.Bundle;import androID.support.v4.app.Fragment;import androID.support.v4.app.FragmentManager;import androID.support.v4.app.FragmentPagerAdapter;public class SectionsPagerAdapter extends FragmentPagerAdapter {static final int NUM_ITEMS = 3;private final FragmentManager mFragmentManager;private Fragment mFragmentAtPos0;public SectionsPagerAdapter(FragmentManager fm) { super(fm); mFragmentManager = fm;}@OverrIDepublic Fragment getItem(int position) { Bundle args = new Bundle(); mFragmentAtPos0= new testFragment(); args.putInt(testFragment.ARG_SECTION_NUMBER,position + 1); mFragmentAtPos0.setArguments(args); return mFragmentAtPos0;}@OverrIDepublic int getItemposition(Object object) { return 0;}@OverrIDe// lIEfert dIE Anzahl der Tabspublic int getCount() { return NUM_ITEMS;}@OverrIDepublic CharSequence getPageTitle(int position) { switch (position) { case 0: // return getString(R.string.Title_section1).toupperCase(); // return // Resources.getSystem().getString(R.string.Title_section1).toupperCase(); return "Suche".toupperCase(); case 1: // return getString(R.string.Title_section2).toupperCase(); // return // Resources.getSystem().getString(R.string.Title_section2).toupperCase(); return "Ergebnis".toupperCase(); case 2: // return // Resources.getSystem().getString(R.string.Title_section3).toupperCase(); return "Optionen".toupperCase(); } return null;}}
其次是我的DatePickerFragment:
package com.example.tab1;import androID.os.Bundle;import androID.support.v4.app.DialogFragment;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;public class DatePickerFragment extends DialogFragment { @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public static DatePickerFragment newInstance() { DatePickerFragment f = new DatePickerFragment(); return f; } @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) { //Log.d("DEBUG","onCreateVIEw"); return inflater.inflate(R.layout.datepickerfrag,container,false); }}
最后是我的MainActivity,我在方法onClickSearch中激活了更改,这是一个来自我的第一个片段中的界面的方法,该方法在应用程序启动时显示.
package com.example.tab1;import androID.app.Actionbar;import androID.app.FragmentTransaction;import androID.os.Bundle;import androID.support.v4.app.Fragment;import androID.support.v4.app.FragmentActivity;import androID.support.v4.vIEw.VIEwPager;import androID.vIEw.Menu;public class MainActivity extends FragmentActivity implements Actionbar.TabListener,testFragment.buttonListenerS{ /** * The {@link androID.support.v4.vIEw.PagerAdapter} that will provIDe * fragments for each of the sections. We use a * {@link androID.support.v4.app.FragmentPagerAdapter} derivative,which * will keep every loaded fragment in memory. If this becomes too memory * intensive,it may be best to switch to a * {@link androID.support.v4.app.FragmentStatePagerAdapter}. */ SectionsPagerAdapter mSectionsPagerAdapter; /** * The {@link VIEwPager} that will host the section contents. */ VIEwPager mVIEwPager; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); // Create the adapter that will return a fragment for each of the three // primary sections // of the app. mSectionsPagerAdapter = new SectionsPagerAdapter( getSupportFragmentManager()); // Set up the action bar. final Actionbar actionbar = getActionbar(); actionbar.setNavigationMode(Actionbar.NAVIGATION_MODE_TABS); // Set up the VIEwPager with the sections adapter. mVIEwPager = (VIEwPager) findVIEwByID(R.ID.pager); mVIEwPager.setAdapter(mSectionsPagerAdapter); // When swiPing between different sections,select the corresponding // tab. // We can also use Actionbar.Tab#select() to do this if we have a // reference to the // Tab. mVIEwPager.setonPagechangelistener(new VIEwPager.SimpleOnPagechangelistener() { @OverrIDe public voID onPageSelected(int position) { actionbar.setSelectednavigationItem(position); } }); // For each of the sections in the app,add a tab to the action bar. for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { // Create a tab with text corresponding to the page Title defined by // the adapter. // Also specify this Activity object,which implements the // TabListener interface,as the // Listener for when this tab is selected. actionbar.addTab(actionbar.newTab() .setText(mSectionsPagerAdapter.getPageTitle(i)) .setTabListener(this)); } actionbar.selectTab(actionbar.getTabAt(0)); } @OverrIDe public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main,menu); return true; } /* * ImplementIErung des "Suchbuttons" (non-Javadoc) * Interaktion zwischen testFragment und MainActivity */ public voID OnclickSearchS() { androID.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.ID.pager,DatePickerFragment.newInstance()); ft.commit(); //mVIEwPager.setCurrentItem(1); } public voID onTabUnselected(Actionbar.Tab tab,FragmentTransaction fragmentTransaction) { } public voID onTabSelected(Actionbar.Tab tab,FragmentTransaction fragmentTransaction) { // When the given tab is selected,switch to the corresponding page in // the VIEwPager. mVIEwPager.setCurrentItem(tab.getposition()); } public voID onTabReselected(Actionbar.Tab tab,FragmentTransaction fragmentTransaction) { } /** * A {@link FragmentPagerAdapter} that returns a fragment corresponding to * one of the primary sections of the app. */}
当应用程序运行时,我第一次按下按钮但没有任何反应,当我再次执行此 *** 作时,我看到一个空片段并在之后出错:
07-30 21:20:17.800: W/dalvikvm(32553): threadID=1: thread exiting with uncaught exception (group=0x40c671f8)07-30 21:20:17.805: E/AndroIDRuntime(32553): FATAL EXCEPTION: main07-30 21:20:17.805: E/AndroIDRuntime(32553): java.lang.NullPointerException07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.support.v4.app.Fragment.setUserVisibleHint(Fragment.java:750)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.support.v4.app.FragmentPagerAdapter.setPrimaryItem(FragmentPagerAdapter.java:130)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.support.v4.vIEw.VIEwPager.populate(VIEwPager.java:893)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.support.v4.vIEw.VIEwPager.populate(VIEwPager.java:772)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.support.v4.vIEw.VIEwPager.completeScroll(VIEwPager.java:1539)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.support.v4.vIEw.VIEwPager.onIntercepttouchEvent(VIEwPager.java:1663)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEwGroup.dispatchtouchEvent(VIEwGroup.java:1631)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEwGroup.dispatchtransformedtouchEvent(VIEwGroup.java:1963)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEwGroup.dispatchtouchEvent(VIEwGroup.java:1690)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEwGroup.dispatchtransformedtouchEvent(VIEwGroup.java:1963)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEwGroup.dispatchtouchEvent(VIEwGroup.java:1690)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEwGroup.dispatchtransformedtouchEvent(VIEwGroup.java:1963)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEwGroup.dispatchtouchEvent(VIEwGroup.java:1690)07-30 21:20:17.805: E/AndroIDRuntime(32553): at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.superdispatchtouchEvent(PhoneWindow.java:2063)07-30 21:20:17.805: E/AndroIDRuntime(32553): at com.androID.internal.policy.impl.PhoneWindow.superdispatchtouchEvent(PhoneWindow.java:1399)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.app.Activity.dispatchtouchEvent(Activity.java:2364)07-30 21:20:17.805: E/AndroIDRuntime(32553): at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.dispatchtouchEvent(PhoneWindow.java:2011)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEw.dispatchPointerEvent(VIEw.java:5861)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEwRootImpl.deliverPointerEvent(VIEwRootImpl.java:3094)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEwRootImpl.handleMessage(VIEwRootImpl.java:2614)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEwRootImpl.processinputEvents(VIEwRootImpl.java:978)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEwRootImpl.performTraversals(VIEwRootImpl.java:992)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.vIEw.VIEwRootImpl.handleMessage(VIEwRootImpl.java:2585)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.os.Handler.dispatchMessage(Handler.java:99)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.os.Looper.loop(Looper.java:137)07-30 21:20:17.805: E/AndroIDRuntime(32553): at androID.app.ActivityThread.main(ActivityThread.java:4507)07-30 21:20:17.805: E/AndroIDRuntime(32553): at java.lang.reflect.Method.invokeNative(Native Method)07-30 21:20:17.805: E/AndroIDRuntime(32553): at java.lang.reflect.Method.invoke(Method.java:511)07-30 21:20:17.805: E/AndroIDRuntime(32553): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)07-30 21:20:17.805: E/AndroIDRuntime(32553): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:557)07-30 21:20:17.805: E/AndroIDRuntime(32553): at dalvik.system.NativeStart.main(Native Method)
我不知道,出了什么问题.
解决方法 当我缺少getItemID(int position)方法重新实现时,我遇到了这个异常,它返回了默认和替换片段的不同(唯一)ID.有关进一步说明和示例实现,请参见 https://stackoverflow.com/a/11974777/685292. 总结以上是内存溢出为你收集整理的replace – 在ViewPager中正确替换碎片全部内容,希望文章能够帮你解决replace – 在ViewPager中正确替换碎片所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)