我为我的Android项目创建了一个名为“Sounds”的自定义类,我希望能够从我的活动中调用它。我班的内容如下:
package com.mypackage;
import java.util.HashMap;
import android.content.Context;
import android.media.SoundPool;
public class Sounds {
private static boolean sound = true;
private static final int FLIP_SOUND = 1;
private static Context context;
private static SoundPool soundPool;
private static HashMap<Integer, Integer> soundPoolMap;
public static void initSounds() {
soundPoolMap.put(FLIP_SOUND, soundPool.load(context, R.raw.flip, 1));
}
public static void playFlip() {
soundPool.play(soundPoolMap.get(FLIP_SOUND), 1, 1, 1, 0, 1);
}
public static void setSound(Boolean onOff) {
sound = onOff;
}
}
在我的主Activity类中,我尝试导入类,创建它的实例,但我想我只是不理解它是如何完成的。有人能指出我正确的方向吗?
答案 0 :(得分:9)
已编辑:来自您的Activity
班级:
private Sounds s;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
s = new Sounds(this);
s.initSounds();
}
您也可以将带有构造函数的上下文发送到自定义类。
删除静态变量和方法:
public class Sounds {
private boolean sound = true;
private int FLIP_SOUND = 1;
private Context context;
private SoundPool soundPool;
private HashMap soundPoolMap;
public Sounds(Context context){
this.context = context;
soundPoolMap = new HashMap();
soundPool = new SoundPool(0, AudioManager.STREAM_MUSIC, 0);
}
public void initSounds() {
soundPoolMap.put(FLIP_SOUND, soundPool.load(context, R.raw.flip, 1));
}
public void playFlip() {
soundPool.play(soundPoolMap.get(FLIP_SOUND), 1, 1, 1, 0, 1);
}
public void setSound(Boolean onOff) {
sound = onOff;
}
}
答案 1 :(得分:2)
我也有关于这种特殊用法的问题。我是Android的新手,甚至是类的使用,我正在研究WebInterface。
Shane Oliver的解决方案使用标准类变量为我工作。
在Activity类中:
Private JavaScriptInterface myJavaScriptInterface;
myJavaScriptInterface.Toastshow("Hi EveryOne");
甚至:
JavaScriptInterface myJavaScriptInterface = new JavaScriptInterface(this);
关于JavaScriptInterface类:
public class JavaScriptInterface {
Context myContext;
//Instanciar o interface e definir o conteudo
JavaScriptInterface(Context c) {
myContext = c;
}
public void Toastshow(String toast_msg)
{
Toast.makeText(myContext, toast_msg, Toast.LENGTH_LONG).show();
}
}
希望这会有所帮助......
答案 2 :(得分:1)
尝试
Sounds s = new Sounds();
s.initSounds();
s.playFlip();
s.setSound(true);
答案 3 :(得分:1)
您已将该类的所有方法设为静态。如果您想按原样使用它们,请使用Sounds.initSound()
调用它们,依此类推。但是,由于您有类变量,因此静态方法和变量看起来不合适。从您的成员中删除static
(FLIP_SOUND
除外),然后尝试创建该类的实例并调用正常的方法。