【问题标题】:Retrieve view in OnClickListener在 OnClickListener 中检索视图
【发布时间】:2015-10-21 08:47:25
【问题描述】:

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

@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);
}

问题是,一旦在活动上,当我实现侦听器的接口时,它会收到我按下按钮时传递的视图“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){

【问题讨论】:

    标签: java android android-fragments listener onitemclicklistener


    【解决方案1】:

    我建议你在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 也可能为空,因为此片段未附加到 Activity 并且没有实例化它的任何视图。无论如何使用我上面显示的方法。

    【讨论】:

    • 感谢您的回答。我将根据按下的按钮创建不同的调用。我知道这会解决问题,因为我不必再比较按钮了,但是无论如何,当我将视图与片段对象进行比较时,您知道如何解决问题吗?
    • 首先这不是你应该这样做的方式。我已经向您展示了正确的方法,但如果您仍然只想使用一个侦听器,您可以比较视图的 ID。 if (v.getId()==R.id.play) { 做你的事情 }
    • 我知道,但是我需要为以后的其他任务检索片段的视图,这就是我问的原因。我已经用你的答案解决了这个问题,谢谢!
    猜你喜欢
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多