导入我的自定义类并调用它的方法?

时间:2010-10-11 14:30:13

标签: android class import

我为我的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类中,我尝试导入类,创建它的实例,但我想我只是不理解它是如何完成的。有人能指出我正确的方向吗?

4 个答案:

答案 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()调用它们,依此类推。但是,由于您有类变量,因此静态方法和变量看起来不合适。从您的成员中删除staticFLIP_SOUND除外),然后尝试创建该类的实例并调用正常的方法。