Ich verwende das ViewPager
Wischen zwischen Fragments
, aber kann ich ViewPager
zwischen Views
einfachen XML-Layouts wechseln ?
Dies ist meine Seite Adapter
für den ViewPager, mit der zwischen Fragmenten gewechselt wird:
import java.util.List;
import com.app.name.fragments.TipsFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.view.ViewGroup;
public class PageAdapter extends FragmentPagerAdapter {
/**
*
*/
List<Fragment> fragments;
public PageAdapter(FragmentManager fm,List<Fragment> frags) {
super(fm);
fragments = frags;
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return TipsFragment.newInstance(0, 0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 4;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
FragmentManager manager = ((Fragment) object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment) object);
trans.commit();
super.destroyItem(container, position, object);
}
}
Und das ist mein Tippfragment:
public class TipsFragment extends Fragment
{
public static TipsFragment newInstance(int image,int content)
{
TipsFragment fragment = new TipsFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tip_layout, null);
return view;
}
}
Wie kann ich meinen Code so ändern, dass er mit Ansichten anstelle von Fragment funktioniert?
ViewPager
On-onDestroy
On-onResume
Aktivität zu entfernen. Es ist also nicht erforderlich, alle 3 Fragmente abzurufen, die möglicherweise nicht mehr verfügbar sind. Ich wollte nur eines der Probleme erwähnen.Antworten:
Sie müssen diese beiden Methoden überschreiben, anstatt
getItem()
:quelle
ViewPager
da Sie mit derViewGroup
Schnittstelle zu tun habenVerwenden Sie dieses Beispiel
Sie können ein einzelnes XML-Layout verwenden, in dem die untergeordneten Ansichten verschachtelt sind.
ABER ... Sie müssen dies auch mit einem Adapter behandeln. Hier geben wir die gefundene Ansichts-ID zurück, ohne ein anderes Layout aufzublasen.
// Setze den ViewPager Adapter
quelle
return collection.findViewById(resId);
wenn Sie keine Aktivitätsinstanz übergeben möchten@Override public void destroyItem(ViewGroup container, int position, Object object) {}
Wir haben eine sehr einfache Unterklasse von der erstellt
ViewPager
, die wir manchmal verwenden.Diese Klasse benötigt keinen Adapter, da sie die Ansichten aus dem Layout lädt. Um es für Ihre Projekte zu verwenden, verwenden Sie es einfach anstelle von
android.support.v4.view.ViewPager
.Das ganze schicke Zeug wird immer noch funktionieren, aber Sie müssen sich nicht um die Adapter kümmern.
quelle
onAttachedToWindow()
zuonFinishInflate()
.Basierend auf den vorherigen Antworten habe ich die folgende Klasse gemacht, um dies auf die richtige und klarste Weise zu erreichen (ich hoffe):
Und Sie müssen es in Ihrer Aktivität festlegen:
Wo die XML-Dateien offensichtlich sind view_screen.xml:
Und ActivtyMain hat das folgende Layout:
Vielen Dank an Brian und Nicholas für Ihre Antwort. Ich hoffe, ich füge einige klarste Informationen hinzu und unterstreiche einige bewährte Methoden für diese Funktion.
quelle
Ich möchte die Antwort von @Nicholas näher erläutern. Sie können die Ansichten anhand der ID abrufen oder, wenn sie dynamisch hinzugefügt werden, die Ansicht direkt anhand ihrer Position abrufen
quelle
Ich möchte hier meine Lösung hinzufügen. Vorausgesetzt , dass Sie zu verwenden Fragmente nicht brauchen, können Sie immer noch ein erstellen ,
PagerAdapter
die legtviews
stattfragments
auf dieViewPager
.Erweitern
PagerAdapter
stattFragmentPagerAdapter
Nun müssen Sie drei Klassen definieren , die das wird wieder
views
in die aufgeblasen werdenviewpager
. Ähnlich wieCpuView
Sie habenMemoryView
undNetworkView
Klassen. Jeder von ihnen wird seine jeweiligen Layouts aufblasen.Und schließlich ein Layout, das in jeder Ansicht aufgeblasen wird
PS: Der Grund, warum ich diese Antwort geschrieben habe, ist, dass alle hier bereitgestellten Lösungen gut zu funktionieren scheinen, aber die Layouts in der PagerAdapter-Klasse selbst aufblasen. Bei großen Projekten ist es schwierig zu warten, wenn viel Code in Bezug auf die aufgeblasenen Layouts vorhanden ist. In diesem Beispiel haben alle Ansichten separate Klassen und separate Layouts. So kann das Projekt einfach gewartet werden.
quelle
Ja ... Sie können View anstelle von Fragment im Viewpager verwenden. Hier finden Sie ein ganzes Beispiel, mit dem Sie Viewpager ohne Fragment erreichen können. Gehen Sie diese Dokumentation durch.
https://www.bignerdranch.com/blog/viewpager-without-fragments/
quelle