ho il seguente file xml:come sostituire Vista Vista Pager completamente con un nuovo frammento in Android
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Ho tre frammenti del cercapersone vista. In uno del frammento che sto cercando di lanciare un nuovo frammento utilizzando questo codice:
FragmentTransaction trans = getFragmentManager()
.beginTransaction();
trans.replace(R.id.pager, new SubscriptionFragment());
trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
trans.addToBackStack(null);
trans.commit();
sono in grado di sostituire con successo il frammento esistente del ViewPager, ma non serve il mio scopo, quello che ho il desiderio di fare è di non sostituire il frammento esistente già presente nel viewPager, ma di rimuovere la vista dal cercapersone stesso dalla vista e di lanciare un nuovo frammento in modo che le schede in alto non siano più visibili e ViewPager vada della vista. Funziona quando lancio una nuova attività utilizzando l'intento. ma non sta lavorando per un frammento.
Modificato:
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout, new MainFragment()).commit();
}
}
MainFragment:
public class MainFragment extends Fragment {
FragmentPagerAdapter adapterViewPager;
ViewPager viewPager;
String title[] = {"Services", "You", "History"};
// TODO: Rename and change types and number of parameters
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
/* Inflate the layout for this fragment */
View view = inflater.inflate(R.layout.fragment_view_pager, container, false);
/*************************************/
//CALLING HISTORY API
// loadSubscriptions();
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ViewPagerAdapter mAdapter = new ViewPagerAdapter(getFragmentManager());
ViewPager mPager = (ViewPager) getView().findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
}
public static class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int num) {
if (num == 0) {
return new ServicesFragment();
} else {
return new HistoryFragment();
}
}
@Override
public int getCount() {
return 2;
}
}
}
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
</FrameLayout>
fragment_view_pager.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
In servicefragment: Sto openig nuovo frammento utilizzando:
physiotherapyView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction trans = getFragmentManager()
.beginTransaction();
/*
* IMPORTANT: We use the "root frame" defined in
* "root_fragment.xml" as the reference to replace fragment
*/
trans.replace(R.id.pager, new SubscriptionFragment());
/*
* IMPORTANT: The following lines allow us to add the fragment
* to the stack and return to it later, by pressing back
*/
trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
trans.addToBackStack(null);
trans.commit();
}
});
è il ViewPager all'interno Frammento troppo? –
@ ItzikSamara non è al suo interno un'attività! – user3458008