replace – 在ViewPager中正确替换碎片

replace – 在ViewPager中正确替换碎片,第1张

概述我试图替换视图中的片段,但还没有成功. 我有以下课程.首先是我的PagerAdapter: package com.example.tab1;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android 我试图替换视图中的片段,但还没有成功.

我有以下课程.首先是我的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中正确替换碎片所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1124594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存