2016-02-15 47 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

你能帮我操作我上面发布的代码吗,我会非常感激。请 :) –