Saya menggunakan ViewPager
untuk menggesek di antara Fragments
, tetapi dapatkah saya menggunakan ViewPager
untuk menggesek antara Views
tata letak XML sederhana?
Ini adalah halaman saya Adapter
untuk ViewPager yang digunakan untuk menggesek antar Fragmen:
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);
}
}
Dan ini adalah fragmen tip saya:
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;
}
}
Bagaimana saya bisa memodifikasi kode saya agar berfungsi dengan Tampilan alih-alih Fragmen?
ViewPager
atasonDestroy
sehingga padaonResume
aktivitas tidak perlu mengambil semua 3 fragmen yang mungkin tidak lagi tersedia. Hanya ingin menyebutkan salah satu masalah.Jawaban:
Anda perlu mengganti dua metode ini daripada
getItem()
:sumber
ViewPager
sama sekali karena Anda berurusan denganViewGroup
antarmukaGunakan contoh ini
Anda dapat menggunakan tata letak XML tunggal untuk menampilkan pandangan anak-anak.
TAPI ... Anda perlu menangani ini dengan adaptor juga. Di sini kita mengembalikan ID tampilan yang ditemukan tanpa mengembang tata letak lainnya.
// Tetapkan adaptor ViewPager
sumber
return collection.findViewById(resId);
Jika Anda tidak ingin memberikan contoh aktivitas@Override public void destroyItem(ViewGroup container, int position, Object object) {}
Kami telah membangun subclass yang sangat sederhana dari
ViewPager
yang kami gunakan kadang-kadang.Kelas ini tidak memerlukan adaptor karena akan memuat tampilan dari tata letak. Untuk menggunakannya, proyek Anda, gunakan saja bukan
android.support.v4.view.ViewPager
.Semua barang mewah masih akan berfungsi, tetapi Anda tidak perlu repot dengan adaptor.
sumber
onAttachedToWindow()
keonFinishInflate()
.Berdasarkan jawaban sebelumnya, saya membuat kelas berikut untuk mencapainya dengan cara yang benar dan jelas (saya harap):
Dan Anda harus mengaturnya dalam aktivitas Anda:
Di mana file XML jelas view_screen.xml:
Dan ActivtyMain memiliki tata letak berikut:
Terima kasih banyak untuk Brian dan Nicholas atas jawaban Anda, saya harap saya menambahkan beberapa informasi yang paling jelas dan menyoroti beberapa praktik yang baik untuk fitur ini.
sumber
Saya ingin menguraikan jawaban @Nicholas, Anda bisa mendapatkan pandangan dengan id atau jika mereka ditambahkan secara dinamis, dapatkan langsung melihat posisi yang diberikan.
sumber
Saya ingin menambahkan solusi saya di sini. Mengingat bahwa Anda tidak perlu menggunakan fragmen, Anda masih dapat membuat
PagerAdapter
lampiran yangviews
bukanfragments
keViewPager
.Perpanjang
PagerAdapter
bukannyaFragmentPagerAdapter
Sekarang Anda perlu mendefinisikan tiga kelas yang akan mengembalikan
views
untuk meningkat dalamviewpager
. Mirip denganCpuView
Anda akan memilikiMemoryView
danNetworkView
kelas. Masing-masing dari mereka akan mengembang tata letak masing-masing.Dan akhirnya tata letak yang akan meningkat di setiap tampilan
PS: Alasan saya menulis jawaban ini adalah karena semua solusi yang disediakan di sini tampaknya bekerja dengan baik, tetapi mereka menggelembungkan tata letak di kelas PagerAdapter itu sendiri. Untuk proyek besar menjadi sulit untuk mempertahankan jika mereka banyak kode yang terkait dengan tata letak yang meningkat. Sekarang dalam contoh ini semua tampilan memiliki kelas dan tata letak yang terpisah. Sehingga proyek dapat dengan mudah dipelihara.
sumber
ya ... Anda bisa menggunakan View daripada Fragment di viewpager. Di sini Anda dapat menemukan contoh Utuh yang akan membantu Anda mencapai Viewpager tanpa Fragmen. Bacalah dokumentasi ini.
https://www.bignerdranch.com/blog/viewpager-without-fragments/
sumber