2012-04-05 5 views
0

Ich verwende ViewPagerIndicator, um verschiedene Seiten in einer einzelnen Aktivität anzuzeigen. Ist es möglich, ein anderes Menü anzuzeigen, indem Sie auf jeder Seite die Menütaste drücken? Zum Beispiel würde Seite 1 die Menüpunkte "Hinzufügen" und "Löschen" anzeigen, während Seite 2 "Bearbeiten" und "Einstellungen" hätte. Dies sind blöde Beispiele, aber es scheint, dass das Menü erstellt wird, wenn die Aktivität instanziiert wird. Wenn ich also die MENÜ-Taste drücke, ist das Menü bereits erstellt, sodass ich die gleichen Menüpunkte bekomme, egal welche Seite gerade angezeigt wird. Ist es möglich, onCreateOptionsMenu() beim Ändern der Seite in ViewPagerIndicator auszulösen?ViewPagerIndicator mit verschiedenen Menüs für jede Seite?

Antwort

1

Sie müssen in Activity

außer Kraft setzen diese onPrepareOptionsMenu (Menü Menü)

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    //In this you can Change Menu from different xml 
    // MenuItem item = menu.findItem(R.id.refresh); 
    // if (item != null) { 
    // item.setVisible (shouldIShowThisItem) 
    // } 
//May be you can set Visibility to set for Item to show or Hide 

     menu.clear(); 
    if(menu_one){ 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.game_menu, menu); 
    }else{ 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.my_menu, menu); 
    } 

    return super.onPrepareOptionsMenu(menu); 

} 

in dieser Methode unten Methode verwenden, können Sie Gerät, das Menü, das Sie anzeigen möchten, wenn Drücken Benutzer Menü-Taste in android.as Sie haben ViewPagerIndicator verwendet, Sie wissen, welche Seite angezeigt wird und entsprechend können Sie Ihre switch Bedingung oder if and else if machen.

+0

Danke. Genau das habe ich gesucht. – Dave

0

Ich habe ein ähnliches Beispiel gemacht. für mich brauchte ich einen Seitenanzeiger (der die Anzahl der Seiten anzeigt) zum Beispiel, wenn ich 4 Seiten habe, die ich für Kreisbilder im Menü bekommen werde. Wenn ich auf Seite 3 bin, wird die dritte Seite gelb sein. Sie können dasselbe tun, aber indem Sie Ihre notwendigen Knöpfe hinzufügen.

sind hier ein einfaches exemple: // zuerst die Haupttätigkeit

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.view.ViewPager; 

public class AwesomePagerActivity extends Activity { 

    private ViewPager awesomePager; 
    private static int NUM_AWESOME_VIEWS = 4; 
    private Context cxt; 
    private Pager awesomeAdapter; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     cxt = this; 

     awesomeAdapter = new Pager(NUM_AWESOME_VIEWS); 
     awesomeAdapter.setContext(cxt); 
     awesomeAdapter.setListeImages(liste_images); 
     awesomePager = (ViewPager) findViewById(R.id.awesomepager); 
     awesomePager.setAdapter(awesomeAdapter); 
    } 

    private Integer[] liste_images = { 
      R.drawable.tuto_step01, R.drawable.tuto_step02, 
      R.drawable.tuto_step03, R.drawable.tuto_step04}; 


} 

als der Pager-Adapter:

import android.content.Context; 
import android.os.Parcelable; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 

public class Pager extends PagerAdapter{ 

    private static int NUM_AWESOME_VIEWS; 
    private Context cxt; 
    Integer[] liste_images; 

    public Pager(int i){ 
     NUM_AWESOME_VIEWS = i; 
    } 
    public void setContext(Context cxt){ 
     this.cxt=cxt; 

    } 

    public void setListeImages(Integer[] liste_images){ 
     this.liste_images=liste_images; 
    } 

    @Override 
    public void destroyItem(View collection, int position, Object view) { 
     ((ViewPager) collection).removeView((View) view); 
    } 

    @Override 
    public void finishUpdate(View arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return NUM_AWESOME_VIEWS; 
    } 

    @Override 
    public Object instantiateItem(View collection, int position) { 

     LayoutInflater inflater = (LayoutInflater)cxt.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View layout = inflater.inflate(R.layout.layout_pager_ind, null); 

     ImageView tv = (ImageView) layout.findViewById(R.id.pager); 

     tv.setImageResource(liste_images[position]); 

     LinearLayout mPagesController = (LinearLayout) layout.findViewById(R.id.pages_controller); 

     int count = getCount(); 

     for (int i = 0; i < count; i++) 
     { 
      if (i == position) 
      { 
       ((ImageView) mPagesController.getChildAt(i)).setImageResource(R.drawable.btn_vflipper_pressed); 
      } 
      else 
      { 
       ((ImageView) mPagesController.getChildAt(i)).setImageResource(R.drawable.btn_vflipper_normal); 
      } 
     } 



     ((ViewPager) collection).addView(layout,0); 

     return layout; 
    } 

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

    @Override 
    public void restoreState(Parcelable arg0, ClassLoader arg1) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public Parcelable saveState() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void startUpdate(View arg0) { 
     // TODO Auto-generated method stub 

    } 

} 

layout_pager_indicator.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:gravity="center" > 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/pager"/> 

<LinearLayout 
     android:id="@+id/pages_controller" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal"> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/btn_vflipper_pressed"> 
     </ImageView> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/btn_vflipper_normal"> 
     </ImageView> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/btn_vflipper_normal"> 
     </ImageView> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/btn_vflipper_normal"> 
     </ImageView>  
    </LinearLayout> 


</LinearLayout> 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
<android.support.v4.view.ViewPager 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/awesomepager"/> 


</LinearLayout> 

Sie können das Projekt AwesomePagerIndicator herunterladen die Änderungen hinzufügen, wie ich es getan habe. Viel Glück :)

Verwandte Themen