2016-09-19 11 views
-1

ich arbeite mit 2 Fragmenten, die Daten anzeigen, in einem Pager, mein Problem ist: dass ich einen Dialog anzeigen möchte, wenn keine Daten zu zeigen, aber sobald ich ' m auf dem einen der beiden Fragmente und deren Inhalt ist leer sind zwei Dialoge dargestellt. Ich habe verschiedene Methoden ausprobiert, aber keine von ihnen hat für mich funktioniert.Dialog anzeigen, wenn Recyclerview leer ist in einem Pager Android

hier ist mein Pager-Adapter:

public class PagerAdapter extends FragmentStatePagerAdapter { 

ArrayList<Fragment> pages = new ArrayList<>(); 


public PagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

@Override 
public Fragment getItem(int position) { 


    return pages.get(position); 
} 

@Override 
public int getCount() { 
    return pages.size(); 
} 

@Override 
public CharSequence getPageTitle(int position) { 

    return pages.get(position).toString(); 
} 

public void addPage (Fragment f){ 
    pages.add(f); 
} 
} 

sowohl die Fragmente sind ähnlich, so dass ich den Code von einem von ihnen zeigen werde:

public class FragmentIng extends Fragment { 
private View v; 


public FragmentIng() { 
    // Required empty public constructor 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 


     v = inflater.inflate(R.layout.fragment_ing, null); 
     RecyclerView recyclerView = (RecyclerView) v.findViewById(R.id.recyclerview); 
     Recycler_View_Adapter adapter = new Recycler_View_Adapter(personnes1, this.getActivity()); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity())); 
     recyclerView.setAdapter(adapter); 

     RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator(); 
     itemAnimator.setAddDuration(1000); 
     itemAnimator.setRemoveDuration(1000); 
     recyclerView.setItemAnimator(itemAnimator); 
     recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)); 
     int i = adapter.getItemCount(); 

    if (i == 0 ){ 
     final NiftyDialogBuilder dialogBuilder= NiftyDialogBuilder.getInstance(this.getContext()); 
     dialogBuilder 
       .withTitle("Employé")         //.withTitle(null) no title 
       .withTitleColor("#FFFFFF")         //def 
       .withDividerColor("#11000000")        //def 
       .withMessage("Aucun employé à afficher")      //.withMessage(null) no Msg 
       .withMessageColor("#FFFFFFFF")        //def | withMessageColor(int resid) 
       .withDialogColor("#FFE74C3C")        //def | withDialogColor(int resid) 
       .withIcon(getResources().getDrawable(R.drawable.icon)) 
       .withDuration(700)           //def 
       .withEffect(Shake)           //def Effectstype.Slidetop 
       .withButton1Text("Retour")          //def gone 
       .withButton2Text("Annuler")         //def gone 
       .isCancelableOnTouchOutside(true)       //def | isCancelable(true) 
       //.setCustomView(R.layout.custom_view,v.getContext())   //.setCustomView(View or ResId,context) 
       .setButton1Click(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         dialogBuilder.cancel(); 
         Toast.makeText(v.getContext(), "Principale", Toast.LENGTH_SHORT).show(); 
         Intent intent = new Intent(getActivity(), MainActivity.class); 
         getActivity().startActivity(intent); 



        } 
       }) 
       .setButton2Click(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         //Toast.makeText(v.getContext(),"i'm btn2",Toast.LENGTH_SHORT).show(); 
         dialogBuilder.cancel(); 
        } 
       }) 
       .show(); 
    } 



    return v; 

} 
@Override 
public String toString() { 
    return "Les Employés"; 
} 

} 

und das ist mein recyclerview Adapter:

public class Recycler_View_Adapter extends RecyclerView.Adapter<View_Holder>{ 


List<Personne> personnes = Collections.emptyList(); 
Context context; 

Dialog dialog; 

public Recycler_View_Adapter(List<Personne> list, Context context) { 
    this.personnes = list; 
    this.context = context; 
} 

private Context getContext() { 
    return context; 
} 


@Override 
public View_Holder onCreateViewHolder(ViewGroup parent, int viewType) { 

    Context context = parent.getContext(); 
    LayoutInflater inflater = LayoutInflater.from(context); 

    View v = inflater.inflate(R.layout.row_layout, parent, false); 
    View_Holder holder = new View_Holder(v); 
    return holder; 
} 

@Override 
public void onBindViewHolder(View_Holder holder, final int position) { 



    holder.title.setText(personnes.get(position).nom_prenom); 
    //holder.description.setText("Etage N° : "+personnes.get(position).etage+" à "+personnes.get(position).date.toDateTime()); 
    holder.occurence.setText(personnes.get(position).occurence+"/"+personnes.get(position).NbrDeJour); 




    animate(holder); 

} 


@Override 
public int getItemCount() { 
      return personnes.size(); 
} 



@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
    super.onAttachedToRecyclerView(recyclerView); 
} 
public void animate(RecyclerView.ViewHolder viewHolder) { 
    final Animation animAnticipateOvershoot = AnimationUtils.loadAnimation(context, R.anim.bounce_interpolator); 
    viewHolder.itemView.setAnimation(animAnticipateOvershoot); 
} 

} 

Antwort

1

Ich denke, dass Sie Ihr Problem lösen könnten, indem Sie setUserVisibleHint Methode überschreiben.

Sie können dies zu Ihrem zweiten Fragment auf viewpager hinzufügen, um zu wissen, wann das Fragment für den Benutzer sichtbar wird, und dann können Sie überprüfen, ob recyclingview leer ist, um Ihren Dialog anzuzeigen.

Zum Beispiel

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 

    if (this.isVisible()) { 

      if (i == 0 ){ 
      final NiftyDialogBuilder dialogBuilder=NiftyDialogBuilder.getInstance(this.getContext()); 
      dialogBuilder 
      .withTitle("Employé")         //.withTitle(null) no title 
      .withTitleColor("#FFFFFF")         //def 
      .withDividerColor("#11000000")        //def 
      .withMessage("Aucun employé à afficher")      //.withMessage(null) no Msg 
      .withMessageColor("#FFFFFFFF")        //def | withMessageColor(int resid) 
      .withDialogColor("#FFE74C3C")        //def | withDialogColor(int resid) 
      .withIcon(getResources().getDrawable(R.drawable.icon)) 
      .withDuration(700)           //def 
      .withEffect(Shake)           //def Effectstype.Slidetop 
      .withButton1Text("Retour")          //def gone 
      .withButton2Text("Annuler")         //def gone 
      .isCancelableOnTouchOutside(true)       //def | isCancelable(true) 
      //.setCustomView(R.layout.custom_view,v.getContext())   //.setCustomView(View or ResId,context) 
      .setButton1Click(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        dialogBuilder.cancel(); 
        Toast.makeText(v.getContext(), "Principale", Toast.LENGTH_SHORT).show(); 
        Intent intent = new Intent(getActivity(), MainActivity.class); 
        getActivity().startActivity(intent); 



       } 
      }) 
      .setButton2Click(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        //Toast.makeText(v.getContext(),"i'm btn2",Toast.LENGTH_SHORT).show(); 
        dialogBuilder.cancel(); 
       } 
      }) 
      .show(); 
      } 

    } 
} 
+0

youu Dank, es hat wirklich mein Problem gelöst ^^ – DevRj

Verwandte Themen