如何处理多个按钮的回调?

4

我是一名新手 Android 开发者,我正在尝试从片段类处理多个按钮点击事件到我的活动类。我已经能够通过在片段类中创建一个监听器,然后让活动类实现该接口来处理一个点击事件。

myFragment.java

    onResetGridListener mCallback;


    // Container activity must implement this interface
    public interface onResetGridListener
    {
        public void ResetGridClicked();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) 
    {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.tilemap, container, false);

        Button button = (Button) view.findViewById(R.id.resetGrid_button);

        // A simple OnClickListener for our button. You can see here how a Fragment can encapsulate
        // logic and views to build out re-usable Activity components.
        button.setOnClickListener(new OnClickListener() 
        {
            public void onClick(View v)
            {
                mCallback.ResetGridClicked();
            }

        });

        return view;
    }

这个工作得很好,但是现在我在同一个片段中有另一个按钮,还有更多的按钮将要出现,我想知道如何处理。活动能否实现多个接口(每个按钮一个接口),或者我的做法有问题?

感谢您的时间和信息。

2个回答

8

您可以让您的碎片实现接口。这样它会像这样:

 //init buttons somewhere
 button.setOnClickListener(this);
 anotherButton.setOnClickListener(this);

 //that's a Fragment method
 public void onClick(View v)
   {
      switch(v.getId()){
          case R.id.button1:
            doStuff();
          break;
          case R.id.button2:
            doStuff();
          break;
      }
   }

1

使用监听器有两种方法:

  1. 使用封装类实现OnClickLitener,在这种情况下,您将在片段类中有以下代码:

    button1.setOnClickListener(this) ; 
    button2.setOnClickListener(this) ;
    
    // 您将需要定义clickHandler:onClick
     public void onClick(View v)
       {
          switch(v.getId()){
              case R.id.button1:
                // 在此处添加您的代码 
              break;
              case R.id.button2:
                // 在此处添加您的代码 
              break;
          }
       }
    
  2. 为每个按钮定义一个监听器:

 button1.setOnClickListener( new View.OnClickListener() {
    public void onClick(View v) {
                     // Perform action on click
                 }
             });
 button2.setOnClickListener( new View.OnClickListener() {
                 public void onClick(View v) {
                     // Perform action on click
                 }
             });

通过这种方式,您不必实现onClickListener接口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接