在OnClickListener中检索视图

时间:2015-10-21 08:47:25

标签: java android android-fragments listener onitemclicklistener

我有一个与活动通信的片段。这个片段有几个按钮,其中一个是“播放”。当我按下按钮时,我已经设置了onClickListener,并且我也将侦听器的界面传递给活动,以便在按下按钮后处理操作。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_header, container, false); 

    play = (Button)view.findViewById(R.id.play);
    play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        listener.onButtonPressed(v);
        }
    });


public interface OnButtonPressedListener {
    public void onButtonPressed(View v);
}

问题是,一旦在活动上,当我实现监听器的接口时,它会收到按下按钮时我通过的View“v”。然后我尝试将我收到的视图与发起调用的特定按钮进行比较,以确保我按下了哪个按钮,因为几个按钮共享同一个界面。出于某种原因,这种比较不能正常工作,但是监听器接口本身可以正常工作。你能告诉我这些家伙我做错了什么吗? 这是我的活动的监听器界面:

@Override
public void onButtonPressed(View v) {

    HeaderFragment h= new HeaderFragment();
      if (v==h.play){
          Toast.makeText(this,"View SI",Toast.LENGTH_LONG).show();
         if (mediaPlayer!=null){

1 个答案:

答案 0 :(得分:0)

我建议您为listener

中的不同按钮创建不同的来电
public ButtinsListener {
 void onPlayClicked()
 void onStop()
//etc
}

然后

 play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        listener.onPlayClicked();
        }
    });

==是参考比较,即两个对象都指向相同的内存位置。在你的情况下,View v和HeaderFragment的h.play是不同的对象,它们是不一样的。此外,h.play可能为null,因为此片段未附加到Activity并且未实例化其任何视图。无论如何使用我上面显示的方法。