2015-03-27 3 views
0

Я пытаюсь создать gridView с ImageButtons внутри них, поэтому при нажатии - звук испускается. Пока у меня есть GridView_layout.xml, макет для моего button.xml. Мой gridAdapter для заполнения сетки с помощью кнопок. С моим текущим кодом сетка заполняется кнопками, но при нажатии звук не испускается.Imagebutton со звуком внутри Gridview

Вот часть моей кнопки деятельности, которая расширяет активность, следующий блок кода внутри метода OnCreate():

 final Context context = getApplicationContext(); 
     final int duration = Toast.LENGTH_SHORT; 
     final ImageButton one = (ImageButton) findViewById(R.id.imageButton); 

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
            int position, long id) { 

       one.setOnClickListener(new View.OnClickListener() { 

        public void onClick(View v) { 


         final MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.pears); 

         if (mp.isPlaying()) { 
          mp.stop(); 
          mp.reset(); 
         } 

         if (mp == null) { 
          Toast toast = Toast.makeText(context, "button error", duration); 
          toast.show(); 
         } else { 

          mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 

           @Override 
           public void onCompletion(MediaPlayer mediaplayer) { 
            mp.stop(); 
            mp.release(); 
           } 
          }); 
          mp.start(); 
         } 
        } 
       }); 
      } 
     }); 

метод GetView() из gridAdapter по запросу:

public View getView(int position, View convertView, ViewGroup parent) { 

    ImageButton imageButton; 
    if (convertView == null) { 

     // if it's not recycled, initialize some attributes 
     imageButton = new ImageButton(mContext); 
     imageButton.setLayoutParams(new GridView.LayoutParams(190, 190)); 
     imageButton.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageButton.setBackgroundColor(white); 

    } else { 
     imageButton = (ImageButton) convertView; 
    } 

    imageButton.setImageResource(mThumbIds[position]); 
    return imageButton; 
} 
+0

вы могли бы разместить свой метод GetView адаптер здесь. –

ответ

0

Если вы хотите воспроизвести звук при нажатии элемента в gridview, измените свой код на это:

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, 
           int position, long id) { 

    MediaPlayer mPlayer = MediaPlayer.create(this, R.raw.pears); 
    mPlayer .start(); 
     } 
    }); 

Если вы хотите воспроизвести звук при нажатии на кнопку, внутри одного из элементов сетки, а затем использовать этот код в методе GetView в адаптере:

one.setOnClickListener(new View.OnClickListener() { 

         public void onClick(View v) { 
     MediaPlayer mPlayer = MediaPlayer.create(this, R.raw.pears); 
     mPlayer .start(); 
     } 
     }); 
+0

Я попробовал ваше последнее предложение remove: gridview.setOnItemClickListener с one.setOnClickListerner(), но он не работает, я получаю ошибку NullPointerException – Noonmoon

+0

, вы уверены, что после инициализации кнопки изображения вы устанавливаете прослушиватель onclick. Не могли бы вы предоставить журнал ошибок –

+0

OnClickListener размещается после инициализации ImageButton. Из logcat я получаю эту ошибку: вызвано: java.lang.NullPointerException at com.non.nonabona.sounds.SoundButtonsActivity.onCreate (SoundButtonsActivity.java:44) специально в строке one.setOnClickListener. – Noonmoon

Смежные вопросы