2016-02-15 78 views
0

我正在創建一個帶有聲音的Android詞典應用程序...我有listview,當選擇了一個項目時,新活動打開,在新活動中包含4個textviews和一個圖像按鈕,textviews完美的功能,但圖像按鈕不是。音頻文件被放置在原始文件夾中。我怎樣才能把被點擊的項目的特定聲音? 下面的代碼:如何在單擊時爲Listview項目播放特定聲音

MainActivityJava

public class MainActivity extends AppCompatActivity { 

ListView lv; 
SearchView sv; 


String[] tagalog= new String[] {"alaala (png.)","araw (png.)","baliw (png.)","basura (png.)", 
     "kaibigan (png.)","kakatuwa (pu.)", "kasunduan (png.)","dambuhala (png.)", 
     "dulo (png.)","gawin (pd.)","guni-guni (png.)","hagdan (png.)","hintay (pd.)", 
     "idlip (png.)","maganda (pu.)","masarap (pu.)", "matalino (pu.)"}; 

int[] sounds= new int[]{R.raw.alaala, 
       R.raw.araw, 
       R.raw.baliw, 
       R.raw.basura, 
       R.raw.kaibigan, 
       R.raw.kakatuwa, 
       R.raw.kasunduan, 
       }; 


ArrayAdapter<String> adapter; 

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


    lv = (ListView) findViewById(R.id.listView1); 
    sv = (SearchView) findViewById(R.id.searchView1); 

    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,tagalog); 
    lv.setAdapter(adapter); 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      String tagword =tagalog[position]; 

      String[] definition = getResources().getStringArray(R.array.definition); 
      final String definitionlabel = definition[position]; 

      String[] cuyuno = getResources().getStringArray(R.array.cuyuno); 
      final String cuyunodefinition = cuyuno[position]; 

      String[] english = getResources().getStringArray(R.array.english); 
      final String englishdefinition = english[position]; 


      Intent intent = new Intent(getApplicationContext(), DefinitionActivity.class); 
      intent.putExtra("tagword", tagword); 
      intent.putExtra("definitionlabel", definitionlabel); 
      intent.putExtra("cuyunodefinition",cuyunodefinition); 
      intent.putExtra("englishdefinition", englishdefinition); 



      startActivity(intent); 

     } 
    }); 


    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String text) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String text) { 

      adapter.getFilter().filter(text); 
      return false; 
     } 



    }); 

} 

    @Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    return super.onCreateOptionsMenu(menu); 
} 

}

DefinitionActivity.java

public class DefinitionActivity extends AppCompatActivity { 

MediaPlayer mp; 

String tagalogword; 
String worddefinition; 
String cuyunoword; 
String englishword; 


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

    TextView wordtv = (TextView) findViewById(R.id.wordtv); 
    TextView definitiontv = (TextView) findViewById(R.id.definitiontv); 
    TextView cuyunotv = (TextView) findViewById(R.id.cuyunotv); 
    TextView englishtv = (TextView) findViewById(R.id.englishtv); 
    ImageButton playbtn = (ImageButton) findViewById(R.id.playbtn); 


    final Bundle extras = getIntent().getExtras(); 

    if (extras != null) { 

     tagalogword = extras.getString("tagword"); 
     wordtv.setText(tagalogword); 

     worddefinition = extras.getString("definitionlabel"); 
     definitiontv.setText(worddefinition); 

     cuyunoword = extras.getString("cuyunodefinition"); 
     cuyunotv.setText(cuyunoword); 

     englishword = extras.getString("englishdefinition"); 
     englishtv.setText(englishword); 

    } 

    playbtn.setOnClickListener(new View.OnClickListener() { 


     @Override 
     public void onClick(View v) { 

     } 
    }); 


} 

回答

0

你可以通過在意向額外的原始ID和播放meadiaPlayer

+0

怎麼樣?你能舉個例子嗎? –

+0

就像你發送tagword,但把原始的id,而不是在其他活動 播放這樣的原始ID MediaPlayer m = MediaPlayer.create(c,rid); m.play(); –

0

你想要完成的事情非常簡單。

你可以通過id。

但我爲您的情況創建了這種方法,您可以將其粘貼到您的活動或課程中並對其進行調用。就我而言,我把一類這個方法保存所有的常用功能,方法,字符串等是你的選擇:

public static void playDisSound(Context c, int soundID){ 
       //Play short tune 
       MediaPlayer mediaPlayer = MediaPlayer.create(c, soundID); 
       mediaPlayer.setOnCompletionListener(new OnCompletionListener(){ 
        @Override 
        public void onCompletion(MediaPlayer mp){ 
         mp.release(); 
        } 
       }); 
       mediaPlayer.start(); 
      } 

這是如何在你的情況下使用它:

例子我想從播放音頻軌道:

int[] sounds= new int[]{R.raw.alaala, 
       R.raw.araw, 
       R.raw.baliw, 
       R.raw.basura, 
       R.raw.kaibigan, 
       R.raw.kakatuwa, 
       R.raw.kasunduan, 
       }; 

所以我只是做:

//TODO ~ pls. remember to define context inside "onCreate" as 

//call this before "onCreate" 
Context context; 

//And do this inside "onCreate" : 
context = getApplicationContext(); 
OR 
context = MainActivity.this; 

//然後他再談到的解決方案,只是做給playDisSound方法與ID的呼叫,在這種情況下,「聽起來[postion_referencer_i]」

playDisSound(context, sounds[postion_referencer_i]); 

//現在對你的「position_referencer_i」將是問題。 ...這也取決於你打算如何傳遞身份證。

你會在拾取的位置和聲音的位置之間進行匹配。這取決於你。但是我會創建一組整數來表示我想玩什麼樣的嘗試,並在爲點擊的項目選擇的位置與position_referencer_id之間進行匹配的簡單計算。

//但是簡單地說:注意,您的陣列中,如果我想例如玩「R.raw.baliw」我只要致電:

playDisSound(context, R.raw.baliw); 

我希望這個作品非常適合你。所以如果我闡述得太多了。如果您需要流式傳輸聲音,請告訴我,以便我只是在正在使用的應用程序中粘貼/發送您一種非常酷的方法。

// FINALLY PLS。記住這一點:這種方法可以播放聲音,但如果重複這個過程,它不會猶豫再次播放聲音。因此,請記住在允許用戶重複之前檢查聲音是否播放並完成,否則可能導致重複或種類不同的兩個揚聲器在同一首歌曲中播放,但時間不同。 (並且用戶可能會開始認爲應用程序出現問題,請使用此方法非常合理且敏感)

爲了解決這個問題,您可以禁用啓動聲音播放的按鈕或UI元素直到聲音播放完畢,通過監測曲目的持續時間(我相信你應該知道並灌輸到你的邏輯中,或通過聽聲音是否已經播放)

一切順利。時代。 :)

+0

你能幫我操作我上面發佈的代碼嗎,我會非常感激。請 :) –