2014-09-28 12 views
5

Sto usando pageradapter e viewpager per visualizzare l'array imageview, array textview. Ma come posso eliminare il cercapersone sul clic del pulsante .Entire codice nel codice sottostante, ma ho aggiunto il pulsante in xml onclick dovrebbe cancellare la pagina.come eliminare l'elemento da viewpager e pageradapter

http://www.androidbegin.com/tutorial/android-viewpager-gallery-images-and-texts-tutorial/

package com.androidbegin.viewpagertutorial; 

    import android.content.Context; 
    import android.support.v4.view.PagerAdapter; 
    import android.support.v4.view.ViewPager; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.view.ViewGroup; 
    import android.widget.Button; 
    import android.widget.ImageView; 
    import android.widget.RelativeLayout; 
    import android.widget.TextView; 

    public class ViewPagerAdapter extends PagerAdapter { 
     // Declare Variables 
     Context context; 
     String[] rank; 
     String[] country; 
     String[] population; 
     int[] flag; 
     LayoutInflater inflater; 

     public ViewPagerAdapter(Context context, String[] rank, String[] country, 
       String[] population, int[] flag) { 
      this.context = context; 
      this.rank = rank; 
      this.country = country; 
      this.population = population; 
      this.flag = flag; 
     } 

     @Override 
     public int getCount() { 
      return rank.length; 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object object) { 
      return view == ((RelativeLayout) object); 
     } 

     @Override 
     public Object instantiateItem(final ViewGroup container, final int position) { 

      // Declare Variables 
      TextView txtrank; 
      TextView txtcountry; 
      TextView txtpopulation; 
      ImageView imgflag; 

      Button b; 

      inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View itemView = inflater.inflate(R.layout.viewpager_item, container, 
        false); 

      // Locate the TextViews in viewpager_item.xml 
      txtrank = (TextView) itemView.findViewById(R.id.rank); 
      txtcountry = (TextView) itemView.findViewById(R.id.country); 
      txtpopulation = (TextView) itemView.findViewById(R.id.population); 
      b=(Button)itemView.findViewById(R.id.button1); 


      b.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 



       } 
      }); 

      // Capture position and set to the TextViews 
      txtrank.setText(rank[position]); 
      txtcountry.setText(country[position]); 
      txtpopulation.setText(population[position]); 

      // Locate the ImageView in viewpager_item.xml 
      imgflag = (ImageView) itemView.findViewById(R.id.flag); 
      // Capture position and set to the ImageView 
      imgflag.setImageResource(flag[position]); 

      // Add viewpager_item.xml to ViewPager 
      ((ViewPager) container).addView(itemView); 

      return itemView; 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      // Remove viewpager_item.xml from ViewPager 
      ((ViewPager) container).removeView((RelativeLayout) object); 

     } 
    } 

////////////////////

// Locate the ViewPager in viewpager_main.xml 
     viewPager = (ViewPager) findViewById(R.id.pager); 
     // Pass results to ViewPagerAdapter Class 
     adapter = new ViewPagerAdapter(MainActivity.this, rank, country, population, flag); 
     // Binds the Adapter to the ViewPager 
     viewPager.setAdapter(adapter); 

risposta

8

prima è necessario utilizzare List a causa della eliminazione di oggetti in modo dinamico . secondo è necessario

@Override 
    public int getItemPosition(Object object){ 
     return PagerAdapter.POSITION_NONE; 
    } 

per forzare l'adattatore per creare nuova pagina ogni volta e non si utilizza in pagine di memoria.

public class ViewPagerAdapter extends PagerAdapter { 
    // Declare Variables 
    Context context; 
    List<String> rank; 
    List<String> country; 
    List<String> population; 
    List<Integer> flag = new ArrayList<Integer>(); 
    LayoutInflater inflater; 

    public ViewPagerAdapter(Context context, String[] rank, String[] country, 
      String[] population, int[] flag) { 
     this.context = context; 
     this.rank = new ArrayList<String>(Arrays.asList(rank)); 
     this.country = new ArrayList<String>(Arrays.asList(country)); 
     this.population = new ArrayList<String>(Arrays.asList(population)); 
     for (int i : flag){ 
      this.flag.add(i); 
     } 

    } 

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

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == ((RelativeLayout) object); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 

     // Declare Variables 
     TextView txtrank; 
     TextView txtcountry; 
     TextView txtpopulation; 
     ImageView imgflag; 

     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View itemView = inflater.inflate(R.layout.viewpager_item, container, 
       false); 

     // Locate the TextViews in viewpager_item.xml 
     txtrank = (TextView) itemView.findViewById(R.id.rank); 
     txtcountry = (TextView) itemView.findViewById(R.id.country); 
     txtpopulation = (TextView) itemView.findViewById(R.id.population); 
     Button b=(Button)itemView.findViewById(R.id.button1); 

     final int delPosition = position; 

     b.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       rank.remove(delPosition); 
       country.remove(delPosition); 
       population.remove(delPosition); 
       flag.remove(delPosition); 
       notifyDataSetChanged(); 
      } 
     }); 
     // Capture position and set to the TextViews 
     txtrank.setText(rank.get(position)); 
     txtcountry.setText(country.get(position)); 
     txtpopulation.setText(population.get(position)); 

     // Locate the ImageView in viewpager_item.xml 
     imgflag = (ImageView) itemView.findViewById(R.id.flag); 
     // Capture position and set to the ImageView 
     imgflag.setImageResource(flag.get(position)); 

     // Add viewpager_item.xml to ViewPager 
     ((ViewPager) container).addView(itemView); 

     return itemView; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     // Remove viewpager_item.xml from ViewPager 
     ((ViewPager) container).removeView((RelativeLayout) object); 

    } 
    @Override 
    public int getItemPosition(Object object){ 
     return PagerAdapter.POSITION_NONE; 
    } 
} 
+0

Ho una domanda, la mia app si arresta in modo anomalo quando provo a eliminare l'ultimo elemento della mia lista. Dice "java.lang.IndexOutOfBoundsException: indice 6 non valido, la dimensione è 6". Punta a questa linea: imageView.setImageResource (regionImages.get (position)); –

+0

@KalaJ pubblica il tuo codice come domanda sul SO. allora dimmi il link! – mmlooloo

+0

L'ho capito, grazie: D –

Problemi correlati