Android中的setOnClickListner()

时间:2016-04-30 01:39:04

标签: java android android-studio button onclick

如果屏幕(UI)中有如此多的按钮并且需要执行单独的功能,对于这种情况,我们可以为每个按钮使用setOnClickListner或者处理此问题的优化方法是什么?

4 个答案:

答案 0 :(得分:2)

我通常会按照以下方式做点什么:

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

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

答案 1 :(得分:2)

让您的活动实施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;

            ...
        }
    }
}

答案 2 :(得分:0)

实现这一目标的最佳方法是实现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;
     .
     .
     .
     .
   }
}

答案 3 :(得分:0)

如果您的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;
   ....

 }
}

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