Estou usando ViewPager
para passar entre Fragments
, mas posso usar ViewPager
para passar entre Views
layout XML simples?
Esta é a minha página Adapter
do ViewPager, usada para deslizar entre os fragmentos:
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);
}
}
E este é o meu fragmento de dica:
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;
}
}
Como posso modificar meu código para trabalhar com Views em vez de Fragment?
ViewPager
ononDestroy
, portanto, sobreonResume
a atividade não haverá necessidade de recuperar todos os 3 fragmentos que podem já não está disponível. Só queria mencionar um dos problemas.Respostas:
Você precisa substituir esses dois métodos em vez de
getItem()
:fonte
ViewPager
a todos como você está lidando com aViewGroup
interface deUse este exemplo
Você pode usar um único layout XML aninhando as visualizações filhas.
MAS ... você precisa lidar com isso com um adaptador também. Aqui retornamos o ID da visualização encontrada sem inflar nenhum outro layout.
// Defina o adaptador do ViewPager
fonte
return collection.findViewById(resId);
se você não quer passar uma instância de atividade@Override public void destroyItem(ViewGroup container, int position, Object object) {}
Criamos uma subclasse muito simples do
ViewPager
que usamos algumas vezes.Esta classe não precisa de um adaptador, pois carregará as visualizações do layout. Para usá-lo em seus projetos, basta usá-lo em vez de
android.support.v4.view.ViewPager
.Todo o material sofisticado ainda funcionará, mas você não precisa se preocupar com os adaptadores.
fonte
onAttachedToWindow()
paraonFinishInflate()
.Com base nas respostas anteriores, fiz a seguinte aula para conseguir isso de maneira adequada e clara (espero):
E você deve configurá-lo em sua atividade:
Onde os arquivos XML são óbvios view_screen.xml:
E o ActivtyMain possui o seguinte layout:
Muito obrigado a Brian e Nicholas por sua resposta, espero adicionar algumas informações mais claras e destacar algumas boas práticas para esse recurso.
fonte
Gostaria de elaborar a resposta do @Nicholas, você pode obter as visualizações por ID ou, se forem adicionadas dinamicamente, basta obtê-las diretamente, dada sua posição
fonte
Eu gostaria de adicionar minha solução aqui. Como você não precisa usar fragmentos, ainda é possível criar um
PagerAdapter
que anexa emviews
vez defragments
aoViewPager
.Estender em
PagerAdapter
vez deFragmentPagerAdapter
Agora você precisa definir três classes que retornarão o
views
a ser inflado noviewpager
. Semelhante aCpuView
você teráMemoryView
eNetworkView
aulas. Cada um deles inflará seus respectivos layouts.E, finalmente, um layout que será inflado em cada uma das vistas
PS: A razão pela qual escrevi esta resposta é porque todas as soluções fornecidas aqui parecem estar funcionando bem, mas elas estão inflando os layouts na própria classe PagerAdapter. Para projetos grandes, fica difícil manter se há muito código relacionado aos layouts inflados. Agora, neste exemplo, todas as visualizações têm classes e layouts separados. Portanto, o projeto pode ser facilmente mantido.
fonte
sim ... você pode usar o modo de exibição em vez do fragmento no viewpager. Aqui você pode encontrar um exemplo completo que o ajudará a alcançar o Viewpager sem fragmento. Consulte esta documentação.
https://www.bignerdranch.com/blog/viewpager-without-fragments/
fonte