Я абсолютно не знаком с Android-программированием, и у меня возникают трудности с его работой (я довольно близок, но мне не хватает чего-то важного).Замена фрагмента в другом фрагменте в ViewPager
У меня есть деятельность под названием 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. Однако в моем случае этого не происходит.
Пожалуйста, помогите мне определить, в чем я ошибаюсь.
Спасибо!
Reiksiel, ты предлагаешь это как ViewPager XML: XML версия = "1,0" кодировка = "UTF-8"> <андроида .support.v4.view.ViewPager XMLNS: андроид = "http://schemas.android.com/apk/res/android" \t \t андроид: идентификатор = "@ + идентификатор/ViewPager" \t \t андроида: layout_width = "match_parent" \t \t android: layout_height = "match_parent"> \t \t \t \t \t \t –
user2808089
И как используется этот режим каретки. Возможно, я ошибаюсь, но я думал, что FragmentStatePageAdapter управляет всеми фрагментами.И эти фрагменты возвращаются getItem (int location). – user2808089
Извините, я не был чист. – Reiksiel