Android-如何通过按钮标签获取资源?

问题描述

我在“活动”中有8个按钮,在res/raw目录中有8个小音频。单击一个按钮后,应用程序将播放与该特定按钮关联的音频。我将每个音频命名为与关联按钮的标签相同/相似。我希望活动中只有一种方法可以解决所有情况。

这是我到目前为止所拥有的:

public class MainActivity extends AppCompatActivity {

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

    public void playPhrase(View view){

        if(view.getTag().toString().equals("doYouSpeak")){
            MediaPlayer mediaPlayer =  MediaPlayer.create(this,R.raw.doyouspeakenglish);
            mediaPlayer.start();
        }
        else if(view.getTag().toString().equals("goodEvening")){
            MediaPlayer mediaPlayer =  MediaPlayer.create(this,R.raw.goodevening);
            mediaPlayer.start();
        }

        // the other 6 cases

    }
}

有没有一种方法可以使用关联的按钮标签(或ID或其他方式)访问音频,而无需整个if / else语句?像这样的东西:

public void playPhrase(View view){
    String tag = view.getTag().toString();
    MediaPlayer mediaPlayer =  MediaPlayer.create(this,R.raw.tag); 
    mediaPlayer.start();
}

解决方法

您可以使用getIdentifier()方法通过字符串名称获取ID。

String tag = view.getTag().toString();    
Int id = getResources().getIdentifier(tag,"raw",getPackageName());
MediaPlayer mediaPlayer =  MediaPlayer.create(this,id);
mediaPlayer.start();

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...