2013-06-21 3 views
1

У меня есть кнопка в действии. Когда я нажимаю кнопку, отображается PopupMenu. Внутри кнопки PopupMenu нажмите «Мне нужно показать галерею на нижней странице». Но им получить ошибку "The constructor MainActivity.ImageAdapter(new PopupMenu.OnMenuItemClickListener(){}) is undefined"Кнопка PopupMenu не работает

код:

main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <Button 
      android:id="@+id/popup_but_id" 
      android:layout_height="wrap_content"   
      android:layout_width="wrap_content" 
      android:text="Popup_button" /> 

    <Gallery 
     android:id="@+id/gallery1" 
     android:layout_marginTop="300dp" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 

MainActivity.java:

public class MainActivity extends Activity { 

    Button popup_but; 

    public class ImageAdapter extends BaseAdapter 
    { 
    Context context; 
    int itemBackground; 


    public ImageAdapter(Context c) 
     { 
     context = c; 
     //---setting the style--- 
     // TypedArray a = obtainStyledAttributes(R.styleable.Gallery1); 
     // itemBackground = a.getResourceId(
          // R.styleable.Gallery1_android_galleryItemBackground, 0); 

     // a.recycle(); 
     } 


    //---returns the number of images--- 
    public int getCount() { 
     return imageIDs.length; 
    } 

    //---returns the item--- 
    public Object getItem(int position) { 
     return position; 
    } 
    //--returns the ID of an item--- 
    public long getItemId(int position) { 
     return position; 
    } 

    //---returns an ImageView view--- 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ImageView imageView; 
      if (convertView == null) { 
      imageView = new ImageView(context); 
      //set the ImageView to display image in array 
      // at user selected position 
      imageView.setImageResource(imageIDs[position]); 
      imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
      imageView.setLayoutParams(new Gallery.LayoutParams(150, 120)); 

      // imageView.setLayoutParams(new Gallery.LayoutParams(300, 300)); 

      } else { 
      imageView = (ImageView) convertView; 
      } 

      imageView.setBackgroundResource(itemBackground); 
      return imageView; 
    } 
} 

    Integer[] imageIDs = { 
      R.drawable.tab, 
      R.drawable.tab1, 
      R.drawable.tab2, 
      R.drawable.tab3, 
      R.drawable.tab4, 
      R.drawable.tab5, 
      R.drawable.tab6, 
      R.drawable.tab7 
     }; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

popup_but = (Button) findViewById(R.id.popup_but_id); 

     popup_but.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       PopupMenu popup = new PopupMenu(MainActivity.this, popup_but); 
       popup.getMenuInflater().inflate(R.menu.main, popup.getMenu()); 

       popup.setOnMenuItemClickListener(new OnMenuItemClickListener() { 

        @Override 
        public boolean onMenuItemClick(MenuItem item) { 
         // TODO Auto-generated method stub 

         switch(item.getItemId()){ 

         case R.id.add: 

          Gallery gallery=(Gallery)findViewById(R.id.gallery1); 

           gallery.setAdapter(new ImageAdapter(this)); 


          break; 

         case R.id.sub: 
          break; 
         case R.id.mul: 
          break; 
         case R.id.div: 
          break; 


         } 

         return true; 
        } 



       }); 
       popup.show(); 

      } 


     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

ответ

0

gallery.setAdapter (новый ImageAdapter (this)); В приведенной выше строке вашего кода «это» означает всплывающее меню, которое нужно прослушивать, тогда как для конструктора в классе адаптера изображения требуется контекст приложения. Попробуйте контекст Mainactivity, например, следующую строку: gallery.setAdapter (новый ImageAdapter (MainActivity. это));

+0

Галерея не отображается при нажатии кнопки – user2474320

+0

Попробуйте проверить значение imageIDs [Position] в функции setImageResource() в функции getView() класса ImageAdapter с использованием журнала. Также попробуйте объявить ваш ниже массив внутри ImageAdapter класса Integer [] = {imageIDs R.drawable.tab, R.drawable.tab1, R.drawable.tab2, R.drawable.tab3, R.drawable.tab4, R.drawable.tab5, R.drawable.tab6, R.drawable.tab7 }; – Swat

+0

Работает. спасибо – user2474320

0

Вы передаете тип возвращаемого из OnMenuItemClickListener() {} к конструктору. Конструктор для ImageAdapter принимает контекст. Используйте MainActivity.this для ссылки на текущий экземпляр Activity, который распространяется из контекста.

+0

Я не получил. Можете ли вы использовать код? – user2474320

+0

Как сказал Сват. Вы используете ключевое слово this внутри анонимного внутреннего класса (в этом случае интерфейс) new OnMenuItemClickListener(). Подумайте об этом таким образом. Ключевое слово «this» изменило его область видимости, потому что вы используете его внутри другого класса. Вы хотите обратиться к текущему объекту MainActivity, поэтому для этого вам нужно «помочь» этому ключевому слову, сообщив ему, что это не текущая область, на которую вы ссылаетесь; это MainActivity. Если вы посмотрите PopupMenu popup = new PopupMenu (MainActivity.this, popup_but); это именно то, что вы сделали. – Emmanuel