Java tutorial
/** * Wire * Copyright (C) 2016 Wire Swiss GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.waz.zclient.pages.main.participants.views; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import com.waz.zclient.R; import com.waz.zclient.utils.ViewUtils; public class TabbedParticipantPagerAdapter extends PagerAdapter implements RecyclerView.RecyclerListener { private Callback callback; private Context context; private ParticipantOtrDeviceAdapter participantOtrDeviceAdapter; public enum ParticipantTabs { DETAILS(R.string.otr__participant__tab_details), DEVICES(R.string.otr__participant__tab_devices); private final int label; ParticipantTabs(int label) { this.label = label; } int getLabel() { return label; } } public TabbedParticipantPagerAdapter(Context context, ParticipantOtrDeviceAdapter participantOtrDeviceAdapter, Callback callback) { this.context = context; this.callback = callback; this.participantOtrDeviceAdapter = participantOtrDeviceAdapter; } @Override public Object instantiateItem(ViewGroup container, int position) { View v; switch (ParticipantTabs.values()[position]) { case DETAILS: v = new ParticipantDetailsTab(context); v.setTag(ParticipantTabs.DETAILS); break; case DEVICES: RecyclerView rv = new RecyclerView(context); rv.setLayoutManager(new LinearLayoutManager(context)); rv.setHasFixedSize(true); rv.setAdapter(participantOtrDeviceAdapter); rv.setRecyclerListener(this); ViewUtils.setPaddingBottom(rv, context.getResources().getDimensionPixelSize(R.dimen.participants__otr_device__padding_bottom)); rv.setClipToPadding(false); v = rv; break; default: throw new RuntimeException("Unexpected ViewPager position"); } container.addView(v); return v; } @Override public void destroyItem(ViewGroup container, int position, Object view) { container.removeView((View) view); } @Override public int getCount() { return ParticipantTabs.values().length; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public CharSequence getPageTitle(int position) { return context.getString(ParticipantTabs.values()[position].getLabel()); } @Override public void finishUpdate(ViewGroup container) { super.finishUpdate(container); if (callback != null) { callback.finishUpdate(); } } @Override public void onViewRecycled(RecyclerView.ViewHolder holder) { if (holder instanceof ParticipantOtrDeviceAdapter.ViewHolder) { ((ParticipantOtrDeviceAdapter.ViewHolder) holder).recycle(); } } public interface Callback { void finishUpdate(); } }