将参数从常规类传递到活动

时间:2018-09-26 15:42:16

标签: android

我想在活动中调用方法,并从android中的非活动常规类向其传递参数。 据我了解,我不能简单地使用以下代码,而且它不起作用:

int mySound = 0;
SoundsActivity soundsActivity = new SoundsActivity();
soundsActivity.playSound(mySound);

该代码位于名为“ MyAdapter”的常规类中。

1 个答案:

答案 0 :(得分:0)

有几种方法可以执行此操作。由于您实际上没有显示任何代码,我无法具体说明。

尽管如此,您还是无法做您想做的事情。无法像这样实例化活动(以及扩展Context的任何内容),它也不会做您想要的事情。

  1. 使用广播。

    这将需要您将Context对象传递到适配器中,只需修改构造函数并添加全局变量即可完成此操作:

    private Context context;
    
    public MyAdapter(Context context) {
        this.context = context;
    }
    

    然后,您可以使用该上下文以自己的操作发送本地广播:

    Intent intent = new Intent("my_custom_action");
    intent.putExtra("sound_type", 0);
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
    

    并在“活动”中接收该操作以调用您的方法:See Context-registered Receivers

    构造适配器时,将Context对象传递给它。如果您是通过Activity(最好是SoundsActivity)构造的,请使用this

    MyAdapter adapter = new MyAdapter(this);
    
  2. 使用回调。

    Delcare某处的界面:

    public interface AdapterCallback {
        void onRequestPlaySound(int type);
    }
    

    在“活动”中实现该界面:

    public class SoundsActivity extends Activity implements AdapterCallback {
        //...
    
        @Override
        public void onRequestPlaySound(int type) {
            playSound(type);
        }
    
        //...
    }
    

    将该接口添加为适配器的构造函数中的参数:

    private AdapterCallback callback;
    
    public MyAdapter(AdapterCallback callback) {
        this.callback = callback;
    }
    

    然后在需要的地方使用callback.onRequestPlaySound(0);

    构造适配器时,将您的SoundsActivity实例传递给它。仅当您从SoundsActivity构建适配器时才有效:

    MyAdapter adapter = new MyAdapter(this);
    
  3. 直接传递SoundsActivity。

    这不是最干净的方法,也不是推荐的方法,但是它可以工作。在您的适配器中:

    private SoundsActivity activity;
    
    public MyAdapter(SoundsActivity activity) {
        this.activity = activity;
    }
    

    并且来自SoundsActivity:

    MyAdapter adapter = new MyAdapter(this);
    

    然后在需要的地方致电activity.playSound(0);