0

私はAndroidプログラミングにまったく慣れていないので、これを機能させるのに苦労しています(私はかなり近いですが、重要なものが欠けています).

患者情報のフラグメントをページングする、PatientPagerActivity というアクティビティがあります。各 PatientFragment にはボタンがあり、クリックすると、患者情報の他にその他の情報も表示されます。したがって、PatientPagerActivity で計画していたのは、PatientFragment を PatientWithMiscFragment に置き換えることでした (これには、患者情報とその他の部分があります)。

activity_pager.xml ファイル:

<android.support.v4.view.ViewPager 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/viewPager"
  android:layout_width="match_parent"
  android:layout_height="match_parent" />

PatientPagerActivity ファイル:

public class PatientPagerActivity extends FragmentActivity
implements PatientPagerActivityCallbacks {
private ViewPager mViewPager;
private List<Patient> mQuizProblemList;

private int mCurrentIndex;
private List<PatientFragment> mPatientFragmentList;
private List<PatientWithMiscFragment> mPatientWithMiscFragmentList;

private static final String EMPTY_TEXT = "";


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pager);

    mViewPager = (ViewPager) findViewById(R.id.viewPager);

    mPatientList = 
               PatientManager.getInstance(this).getPatients();

    FragmentManager fm = getSupportFragmentManager();
    mViewPager.setAdapter(new FragmentStatePagerAdapter(fm) {
        @Override
        public int getCount() {
            return mPatientList.size();
        }

        @Override
        public Fragment getItem(int location) {
            Patient patient = mPatientList.get(location);
            PatientFragment fragment = 
                                    PatientFragment.newInstance(patient);
            PatientWithMiscFragment miscFragment = 
                                    PatientWithMiscFragment.newInstance(patient);

            if(mPatientFragmentList== null) {
                mPatientFragmentList = 
                                          new ArrayList<PatientFragment>();
            }
            mPatientFragmentist.add(fragment);

            if(mPatientWithMiscFragmentList == null) {
                mPatientWithMiscFragmentList = 
                                       new ArrayList<PatientWithMiscFragment>();
            }
            mPatientWithMiscFragmentList.add(miscFragment);

            return fragment;
        }
    });

    mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageSelected(int counter) {
            setTitle("Patient: " + (counter + 1));
            mCurrentIndex = counter;
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            hideMiscInformation();
        }
    });

    long patientID =
                   getIntent().getLongExtra(PatientFragment.EXTRA_PATIENT_ID, -1);
    for(int counter = 0; counter < mPatientList.size(); counter++) {
        if(mPatientList.get(counter).getPatient().getID() == patientID) {
            mViewPager.setCurrentItem(counter);
            setTitle("Patient: " + (counter + 1));
            mCurrentIndex = counter;
            break;
        }
    }
}

@Override
public void onMiscSelected() {
    if(findViewById(R.id.viewPager) != null) {
        FragmentManager fm  = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();

                    //Find the current PatientInformation
        Fragment oldFragment = mPatientFragmentList.get(mCurrentIndex);
        //And Remove it 
        if(oldFragment != null) {
            ft.remove(oldFragment);
            ft.commit();
        }
                    //Notify the adapter that data set has changed.
        notifyAdapterDataSetChanged();

        ft = fm.beginTransaction();
                    //Replace it with the corresponding fragment that also has misc
        ft.add(R.id.viewPager,
                           mPatientWithMiscFragmentList.get(mCurrentIndex));
        ft.commit();    
        notifyAdapterDataSetChanged();
    }
}

public void hideMiscInformation() {
    if(findViewById(R.id.viewPager) != null) {
        FragmentManager fm  = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();

        //Remove the misc information
        Fragment oldMiscFragment =
                         fm.findFragmentById(R.id.viewPager);           
        if(oldMiscFragment != null) {
            ft.remove(oldMiscFragment);
            ft.commit();
        }
                    //Replace it with ONLY the patient information.
                    ft = fm.beginTransaction();
        ft.add(R.id.viewPager, mPatientFragmentList.get(mCurrentIndex));
        ft.commit();
        notifyAdapterDataSetChanged();
    }
}
    :
    :
}

ユーザーがその他の情報に関心がある場合、PagerActivity へのコールバックが発生し、onMiscSelected() が PatientFragment を PatientWithMiscFragment に置き換えます。しかし、私の場合、これは起こっていません。

どこが間違っているのかを特定するのを手伝ってください。

ありがとうございました!

4

2 に答える 2

-1

シンプルな「FrameLayout」を使用して、フラグメントで膨らませることができます。そのため、最新のフラグメントが前のフラグメントに置き換わります。

ここに例があります

幸運を!

于 2013-10-14T17:50:14.003 に答える