2016-02-25 2 views
0

Puis-je appeler une activité dans PagerAdapter?Activité d'appel dans PagerAdapter

le bouton de clic est à l'intérieur public override Java.Lang.Object InstantiateItem(ViewGroup container, int position)

puis-je faire dans Xamarin studio visulal 2013?

public class SamplePagerAdapter : PagerAdapter 
    { 
     List<string> items = new List<string>(); 

     public SamplePagerAdapter() : base() 
     { 

      items.Add("    All Categories  "); 
      items.Add("  Featured       "); 


     } 

     public override int Count 
     { 
      get { return items.Count; } 
     } 

     public override bool IsViewFromObject(View view, Java.Lang.Object obj) 
     { 
      return view == obj; 
     } 

     public override Java.Lang.Object InstantiateItem(ViewGroup container, int position) 
     { 


      View view = LayoutInflater.From(container.Context).Inflate(Resource.Layout.pager_item, container, false); 
       container.AddView(view); 


      if (position == 0) 
      { 
       view = LayoutInflater.From(container.Context).Inflate(Resource.Layout.pager_item, container, false); 
       container.AddView(view); 
       var imgcarbtn = view.FindViewById<ImageButton>(Resource.Id.imgcar); 
       imgcarbtn.Click += imgcarbtn_Click; 
      } 
      else if (position == 1) { 
       view = LayoutInflater.From(container.Context).Inflate(Resource.Layout.featuredadds, container, false); 

      } 

      int pos = position + 1; 

      Console.Out.WriteLine(pos); 
      container.AddView(view); 

      return view; 
     } 

     void imgcarbtn_Click(object sender, EventArgs e) 
     { 
      activity.StartActivity(typeof(Labas)); 
      //weakactivity(Labas) ; 
      //throw new NotImplementedException(); 
     } 

     private WeakReference weakactivity; 
     private Activity activity 
     { 
      get { return weakactivity.Target as Activity; } 
      set { weakactivity = new WeakReference(value); } 
     } 

     public SamplePagerAdapter(Activity activity) 
      : base() 
     { 
      this.activity = activity; 
     } 

     public string GetHeaderTitle (int position) 
     { 
      return items[position]; 
     } 

     public override void DestroyItem(ViewGroup container, int position, Java.Lang.Object obj) 
     { 
      container.RemoveView((View)obj); 
     } 
    } 

Répondre

1

Oui vous pouvez,

Passer la référence de l'activité dans le constructeur de la PagerAdapter. Assurez-vous de le stocker comme WeakReference pour éviter toute fuite d'activité.

public class YourPagerAdapter : PagerAdapter 
{ 
    private WeakReference weakactivity; 
    private Activity activity 
    { 
    get { return weakactivity.Target as Activity; } 
    set { weakactivity = new WeakReference(value); } 
    } 

    public YourPagerAdapter(Activity activity) : base() 
    { 
    this.activity = activity; 
    } 
} 
+0

Bonne utilisation de la référence faible! – matthewrdev

+0

ne fonctionne pas ici public class SamplePagerAdapter: PagerAdapter { – BlueAries

+0

Que dois-je mettre ici pour appeler l'activité en utilisant la référence faible? void imgcarbtn_Click (expéditeur d'objet, EventArgs e) { // weakactivity (NewActivity); // throw new NotImplementedException(); } – BlueAries