【问题标题】:setOnClickListner () in Android [closed]Android中的setOnClickListener()[关闭]
【发布时间】:2016-08-25 06:59:07
【问题描述】:

如果屏幕(UI)中有这么多按钮,需要做单独的功能,对于这种场景,我们可以为每个按钮使用 setOnClickListner 吗?或者有什么优化的方法来处理呢?

【问题讨论】:

  • 我认为ButterKnife 是解决您问题的好方法。

标签: java android android-studio button onclick


【解决方案1】:

我通常会这样做:

public class Menu extends AppCompatActivity {

Private Button button1, button2, button3, button4, button5;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);


        button1 = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
        button3 = (Button) findViewById(R.id.button3);
        button4 = (Button) findViewById(R.id.button4);
        button5 = (Button) findViewById(R.id.button5);

        Button[] buttons = new Button[] {button1, button2, button3, button4, button5};
        final String[] functions= new String[] {"options", "exit", "credits", "more", "pictures"};
        for (int i = 0; i < buttons.length; i++) {
            final String function = functions[i].toString();
            buttons[i].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    StartIntent(function);
                }
            });
        }
    }

    private StartIntent (String function){
        Intent i;

        switch (function) {
            case options:
                i = new Intent(this, OptionsActivity.class);
                break;
            case options:
                i = new Intent(this, ExitActivity.class);
                break;
            case options:
                i = new Intent(this, CreditsActivity.class);
                break;
            case options:
                i = new Intent(this, MoreActivity.class);
                break;
            case options:
                i = new Intent(this, PicturesActivity.class);
                break;
            default:
                Log.e("StartIntent", "invalid function");
                return;
        }

        startActivity(i);
    }
}

这将根据您单击的按钮打开不同的意图,但这实际上取决于您的情况。

【讨论】:

    【解决方案2】:

    让你的activity实现View.onClickListener并切换发送的View id:

    public class YourActivity extends ... implements View.OnClickListener
    {   
        ...
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
    
            ...
    
            button1.setOnClickListener(this);
            button2.setOnClickListener(this);
    
        }
    
        ...
    
        @Override
        public void onClick(View view)
        {
    
            switch (view.getId())
            {
                case R.id.yourFirstButton:
                    ...
                    break;
    
                case R.id.yourSecondButton:
                    ...
                    break;
    
                ...
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      实现这一点的最佳方法是实现 View.OnClickListener。 在 onClick() 中,您可以将开关盒用于按钮。

         @Override
      public void onClick(View v) {
       switch(v.getId()){
        case R.id.Button1 :  //Your button code
                               break;
        case R.id.Button2 : // Your Second Button code
                                break;
           .
           .
           .
           .
         }
      }
      

      【讨论】:

        【解决方案4】:

        如果您的 UI 中有太多按钮,您可以按照此步骤操作

        在您的设计页面 (XML) 中,对具有相同名称的每个活动使用“onClick()”方法。在我的情况下,它是 android:onClick="onClickButton"

        <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClickButton"
        android:textColor="@color/icons" />
        
        <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClickButton"
        android:textColor="@color/icons" />
        

        现在在Activity页面使用方法是这样的,

        public void onClickButton(View v)
        {
        switch(v.getId())
         {
           case R.id.button1:
               //do your work related to on click button1
           break;
        
           case R.id.button2:
              //do your work related to on click button2
           break;
           ....
        
         }
        }
        

        您可以在机箱中使用任意数量的按钮。 希望对您有所帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-23
          • 1970-01-01
          相关资源
          最近更新 更多