I need to update my BaseAdapter within my Fragment within my ViewPager.
I have 4 fragments, inside one of them(the second) I have another ViewPager with items, and those items have a button and when I click the button I want to add it to another fragment(the third) i alredy tried to use this:
Update Fragment from ViewPager
ViewPager PagerAdapter not updating the View
How to update fragment content from activity (viewpager)?
Any of this worked for me.
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
switch (position){
case 0:
carregaCesto();
return frag_Noticias.newInstance("a","b");
case 1:
carregaCesto();
ArrayList<String> grupoFamilias = new ArrayList<String>();
grupoFamilias.add("GÁS COMBUSTÍVEL");
grupoFamilias.add("APARELHOS DE COMBUSTÃO");
grupoFamilias.add("ELECTRODOMÉSTICOS");
grupoFamilias.add("UTENSÍLIOS DE COZINHA");
return frg_produtos_viewpager.newInstance(grupoFamilias,cesto);
case 2:
carregaCesto();
return frag_Cesto.newInstance(cesto);
case 3:
//return MapsActivity.newInstance();
Fragment fragment = new MapFragment();
return fragment;
//return MapFragment.
}
return null;
}
@Override
public int getCount() {
return 4;
}
@Override
public CharSequence getPageTitle(int position) {
if(position == 0){
return "Noticias";
}else{
if(position ==1){
return "Produtos";
}else{
if(position == 2){
return "Cesto";
}else{
if(position == 3){
return "MAPA";
}else{
return null;
}
}
}
}
}
}
Fragment 2:
public class frg_produtos_viewpager extends Fragment {
private OnFragmentInteractionListener mListener;
public static final String ARG = "list";
public static final String ARG3 = "list3";
private ArrayList<String> grupoFamilias;
private Cesto cesto;
public frg_produtos_viewpager() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @return A new instance of fragment frg_produtos_viewpager.
*/
// TODO: Rename and change types and number of parameters
public static frg_produtos_viewpager newInstance(ArrayList<String> produtos,Cesto cesto) {
frg_produtos_viewpager fragment = new frg_produtos_viewpager();
Bundle args = new Bundle();
args.putStringArrayList(ARG, produtos);
args.putParcelable(ARG3,cesto);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
this.grupoFamilias = args.getStringArrayList(ARG);
this.cesto = args.getParcelable(ARG3);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_produtosviewpager, container, false);
ViewPager vpPager = (ViewPager) rootView.findViewById(R.id.viewPager);
MyFragmentAdapter adapterViewPager = new MyFragmentAdapter(getFragmentManager(),grupoFamilias,cesto);
vpPager.setAdapter(adapterViewPager);
vpPager.setCurrentItem(1);
return rootView;
}
// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
}
}
Fragment 3:
public class frag_Cesto extends Fragment{
public static final String ARG = "list";
private ArrayList<Produto> produtos;
private Cesto c;
private ArrayList<Integer> produtosNr;
private TextView tv;
private OnFragmentInteractionListener mListener;
public frag_Cesto() {
// Required empty public constructor
}
public static frag_Cesto newInstance(Cesto cesto) {
frag_Cesto fragment = new frag_Cesto();
Bundle args = new Bundle();
args.putParcelable(ARG,cesto);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
if (args.containsKey(ARG)) {
this.c = args.getParcelable(ARG);
if(c != null){
this.produtos = c.getArray();
this.produtosNr = c.getNr();
}else{
this.produtosNr = new ArrayList<>();
this.produtos = new ArrayList<>();
}
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_cesto, container, false);
GridView lv = (GridView) rootView.findViewById(R.id.gridViewProdutosCesto);
tv = (TextView)rootView.findViewById(R.id.tvPrecoFinal);
lv.setAdapter(new MyAdapterCesto(getContext(), produtos, produtosNr, (AtividadePrincipal)getActivity(), c,this));
if(c!=null && c.getArray().size()!= 0){
mudarPrecoFinal("Preço: "+c.getPrecoFinal() + "€");
}
return rootView;
}
public void mudarPrecoFinal(String preco){
tv.setText(preco);
}
// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
}
}
Adapter for fragment 2:
public class MyFragmentAdapter extends FragmentPagerAdapter {
public static int pos = 0;
private ArrayList<Produto>listaProdutosTodos;
private ArrayList<String> produtos;
private Cesto cesto;
public int getItemPosition(Object object) {
return POSITION_NONE;
}
public MyFragmentAdapter(FragmentManager fm,ArrayList<String> produtos,Cesto cesto){
super(fm);
this.produtos = produtos;
adicionarValoresArray();
this.cesto = cesto;
}
@Override
public Fragment getItem(int position) {
ArrayList<Produto>listaProdutos = new ArrayList<>();
switch (position) {
case 0:
ArrayList<String> grupoFamilias = new ArrayList<String>();
grupoFamilias.add("GÁS COMBUSTÍVEL");
grupoFamilias.add("APARELHOS DE COMBUSTÃO");
grupoFamilias.add("ELECTRODOMÉSTICOS");
grupoFamilias.add("UTENSÍLIOS DE COZINHA");
return frag_Produtos.newInstance(grupoFamilias);
case 1:
listaProdutos.clear();
listaProdutos.add(new Produto(1,R.drawable.img1, "Garrafa Gás Butano", "Gás butano em garrafa modelo G26", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img2, "Garrafa Gás Propano", "Gás propano em garrafa modelo G26", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img3, "Garrafa Gás Propano", "Gás propano em garrafa modelo G26", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img4, "Garrafa Gás Butano Pluma", "Gás butano em garrafa Pluma exclusiva GalpGás", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img5, "Garrafa Gás Butano", "Gás butano em garrafa modelo G110", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img6, "Garrafa Gás Propano", "Gás propano em garrafa modelo G110", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img7, "Garrafa Minigás", "Gás butano em garrafa mini", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img8, "Cartucho Gás Butano-propano", "Mistura de gás butano-propano em cartucho de 190g", 20.00));
return frag_gridView.newInstance(cesto,listaProdutos,listaProdutosTodos);
case 2:
listaProdutos.clear();
listaProdutos.add(new Produto(1,R.drawable.img12, "Candeeiro Lightspot", "Candeeiro invovador para exterior", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img13, "Aquecedor Hotspot Tradicional", "Aquecedor a gás", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img14, "Aquecedor Hotspot Interior", "Aquecedor a gás", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img15, "Aquecedor Hotspot Silver", "Aquecedor a gás", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img16, "Aquecedor Hotspot Style", "Aquecedor a gás", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img17, "Lanterna Lightspot", "Lanterna Lightspot para utilização com cartucho de gás", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img18, "Fogareiro Cookspot", "Fogareiro Cookcpot para utilização com cartucho de gás", 20.00));
return frag_anotherGridView.newInstance(cesto,listaProdutos,listaProdutosTodos);
case 3:
listaProdutos.clear();
listaProdutos.add(new Produto(1,R.drawable.img19, "Grelhadores Eléctricos", "Uma vasta gama de grelhadores eléctricos", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img20, "Ferros a Vapor", "Uma vasta gama de ferros a vapor das melhores marcas", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img21, "Aspiradores", "Gama completa de aspiradores para toas as potências", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img22, "Pequenos Electrodomésticos", "Todo o tipo de pequenos electrodomésticos das principais marcas", 20.00));
return frag_anotherGridView.newInstance(cesto,listaProdutos,listaProdutosTodos);
case 4:
listaProdutos.clear();
listaProdutos.add(new Produto(1,R.drawable.img23, "Mata moscas", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img24, "Funil", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img25, "Suporte de rolo de cozinha", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img26, "Caixa para cotonetes", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img27, "Doseador de sabonete", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img28, "Fio dental; tampa para pasta de dentes e escova de dentes", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img29, "Paliteiros", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img30, "Pratos e talheres para pizza", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img31, "Taças multiusos", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img32, "Taças multiusos", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img33, "Frascos multiusos", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img34, "Açucareiros", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img35, "Tira borbotos", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img36, "Caixas multiusos", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img37, "Saca rolhas", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img38, "Tira cápsulas", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img39, "Suporte para canetas", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img40, "Suporte para guardanapos e velas", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img41, "Temporizadores", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img42, "Taças multiusos", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img43, "Caixa para bolachas", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img44, "Taças para cães e gatos", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img45, "Taças para cães e gatos", "", 20.00));
listaProdutos.add(new Produto(1,R.drawable.img46, "Regadores", "", 20.00));
return frag_anotherGridView.newInstance(cesto,listaProdutos,listaProdutosTodos);
}
return null;
}
@Override
public int getCount(){
return produtos.size()+1;
}
// Returns the page title for the top indicator
@Override
public CharSequence getPageTitle(int position) {
return "Page " + position;
}
public static int getPos() {
return pos;
}
public static void setPos(int pos) {
MyFragmentAdapter.pos = pos;
}
public void adicionarValoresArray(){
listaProdutosTodos = new ArrayList<>();
listaProdutosTodos.add(new Produto(1,R.drawable.img1, "Garrafa Gás Butano", "Gás butano em garrafa modelo G26", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img2, "Garrafa Gás Propano", "Gás propano em garrafa modelo G26", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img3, "Garrafa Gás Propano", "Gás propano em garrafa modelo G26", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img4, "Garrafa Gás Butano Pluma", "Gás butano em garrafa Pluma exclusiva GalpGás", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img5, "Garrafa Gás Butano", "Gás butano em garrafa modelo G110", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img6, "Garrafa Gás Propano", "Gás propano em garrafa modelo G110", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img7, "Garrafa Minigás", "Gás butano em garrafa mini", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img8, "Cartucho Gás Butano-propano", "Mistura de gás butano-propano em cartucho de 190g", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img12, "Candeeiro Lightspot", "Candeeiro invovador para exterior", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img13, "Aquecedor Hotspot Tradicional", "Aquecedor a gás", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img14, "Aquecedor Hotspot Interior", "Aquecedor a gás", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img15, "Aquecedor Hotspot Silver", "Aquecedor a gás", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img16, "Aquecedor Hotspot Style", "Aquecedor a gás", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img17, "Lanterna Lightspot", "Lanterna Lightspot para utilização com cartucho de gás", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img18, "Fogareiro Cookspot", "Fogareiro Cookcpot para utilização com cartucho de gás", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img19, "Grelhadores Eléctricos", "Uma vasta gama de grelhadores eléctricos", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img20, "Ferros a Vapor", "Uma vasta gama de ferros a vapor das melhores marcas", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img21, "Aspiradores", "Gama completa de aspiradores para toas as potências", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img22, "Pequenos Electrodomésticos", "Todo o tipo de pequenos electrodomésticos das principais marcas", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img23, "Mata moscas", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img24, "Funil", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img25, "Suporte de rolo de cozinha", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img26, "Caixa para cotonetes", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img27, "Doseador de sabonete", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img28, "Fio dental; tampa para pasta de dentes e escova de dentes", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img29, "Paliteiros", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img30, "Pratos e talheres para pizza", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img31, "Taças multiusos", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img32, "Taças multiusos", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img33, "Frascos multiusos", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img34, "Açucareiros", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img35, "Tira borbotos", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img36, "Caixas multiusos", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img37, "Saca rolhas", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img38, "Tira cápsulas", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img39, "Suporte para canetas", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img40, "Suporte para guardanapos e velas", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img41, "Temporizadores", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img42, "Taças multiusos", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img43, "Caixa para bolachas", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img44, "Taças para cães e gatos", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img45, "Taças para cães e gatos", "", 20.00));
listaProdutosTodos.add(new Produto(1,R.drawable.img46, "Regadores", "", 20.00));
}
}
Adapter for Fragment 3:
public class MyAdapterCesto extends BaseAdapter {
private ArrayList<Produto> mItems;
private LayoutInflater mInflater;
private AtividadePrincipal main;
private Cesto c;
private ArrayList<Integer> mItemsNr;
private frag_Cesto fragmento;
//https://stackoverflow.com/questions/24372218/access-fragment-from-adapter
public MyAdapterCesto(Context context, ArrayList<Produto>mItems, ArrayList<Integer> mItemsNr , AtividadePrincipal main, Cesto cesto,frag_Cesto fragm) {
mInflater = LayoutInflater.from(context);
this.mItems = mItems;
this.main = main;
this.mItemsNr = mItemsNr;
c = cesto;
fragmento = fragm;
}
@Override
public int getCount() {
return mItems.size();
}
@Override
public Produto getItem(int i) {
return mItems.get(i);
}
@Override
public long getItemId(int i) {
return mItems.get(i).getImagem();
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v = view;
ImageView picture;
Button bt;
final TextView titulo,preco;
NumberPicker np;
final int numero = i;
if (v == null) {
v = mInflater.inflate(R.layout.list_row_final, viewGroup, false);
v.setTag(R.id.gasImagem, v.findViewById(R.id.gasImagem));
v.setTag(R.id.gasPreco, v.findViewById(R.id.gasPreco));
v.setTag(R.id.gasTitulo, v.findViewById(R.id.gasTitulo));
v.setTag(R.id.btRetirar, v.findViewById(R.id.btRetirar));
v.setTag(R.id.npProduto, v.findViewById(R.id.npProduto));
}
picture = (ImageView) v.getTag(R.id.gasImagem);
bt = (Button) v.getTag(R.id.btRetirar);
titulo = (TextView) v.getTag(R.id.gasTitulo);
preco = (TextView) v.getTag(R.id.gasPreco);
np = (NumberPicker) v.getTag(R.id.npProduto);
Produto item = getItem(i);
titulo.setText(item.getNome());
picture.setImageResource(item.getImagem());
preco.setText("Preço:"+mItems.get(numero).getPreco()*mItemsNr.get(numero)+"€");
np.setMaxValue(20);
np.setMinValue(1);
np.setValue(mItemsNr.get(numero));
np.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
c.getNr().set(numero,newVal);
preco.setText("Preço:"+mItems.get(numero).getPreco()*mItemsNr.get(numero)+"€");
int nr = mItemsNr.get(numero);
main.guardarCesto(c);
fragmento.mudarPrecoFinal("Preço:" + c.getPrecoFinal()+"€");
}
});
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
c.getArray().remove(numero);
c.getNr().remove(numero);
main.guardarCesto(c);
fragmento.mudarPrecoFinal("Preço:" + c.getPrecoFinal()+"€");
updateAdapter();
}
});
picture = (ImageView) v.getTag(R.id.picture);
Produto produto = mItems.get(i);
//picture.setImageResource(produto.getImagem());
return v;
}
private void updateAdapter() {
this.mItems = c.getArray();
this.mItemsNr = c.getNr();
//and call notifyDataSetChanged
notifyDataSetChanged();
}
private static boolean isExternalStorageAvailable(){
String estadoSD = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(estadoSD))
return true;
return false;
}
private static boolean isExternalStorageReadOnly(){
String estadoSD = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED_READ_ONLY.equals(estadoSD))
return true;
return false;
}
}
If you need any more code just say!
I think the only thing that i didn't try was .setTag();
I didn't understand how to do it.
Tnx :)