1

我有一个按钮,可以从一些编辑文本中获取文本,并根据从微调器中选择的选项对它们进行一些计算,因此 Click 上有很多代码,我需要使用它 3 次

目前我的代码看起来像这样

if (getIntent().hasExtra("blk")) {
            btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    // a lot of code here
                }
            });
        } else if (getIntent().hasExtra("Length")) {
            edtNumber1.setText(setLength + "");

            btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    // do the same here
                }
            });
        } else if (getIntent().hasExtra("Height")) {
            edtNumber2.setText(setHeight + "");

            btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    // do the same here
                }
            });

如何缩短此代码,我发现自己经常重复相同的代码

4

6 回答 6

3

你可以让你的 ActivityClass 来实现View.OnClickListener()

现在将每个按钮设置onClickListener()为 ->

btn.setOnClickListener(this)

将 onClickListener 实现为 ->

@Override
public void onClick(View v) {
    //Do common work here and if you want to do different work then ->
    switch(v.getId())
    {
      case R.id.btn:
                    //TODO Code
                    break;
      case R.id.something:
                    break;    
    }

}
于 2013-05-07T19:31:18.917 回答
2

正如@Luksprog 在评论中提到的,创建一个可以重用的方法:

private void doALotOfWork() {
    // do a lot of work here
}

并在需要的任何地方调用它:

@Override
public void onClick(View v) {
    doALotOfWork();
}
于 2013-05-07T19:26:19.243 回答
2

您可以修改您的 Activity 以适当地实施OnClickListener和覆盖onClick()

然后你只需要调用btn.setOnClickListener(this);,你只需要调用一次。

如果你有很多视图调用你的 Activity 的 onClick 方法,你可以做一个 switch on view.getId()

于 2013-05-07T19:27:17.710 回答
2

如果您不想实现接口,请使用方法来执行此操作。

    setButtonListener(Button btn) {
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            whenButtonGetsClicked();

        }
    });
}

whenButtonGetsClicked(){
    //do your magic
}

但是,我建议使用 Tanix.7x 描述的界面来执行此操作

于 2013-05-07T19:31:43.793 回答
1

对我来说最直接的方法:

OnClickListener buttonListener=new OnClickListener()  {
  @Override
  public void onClick(View arg0) {
      // a lot of code here
  }
}

if (getIntent().hasExtra("blk")) {
  btn.setOnClickListener(buttonListener);
} else if (getIntent().hasExtra("Length")) {
  edtNumber1.setText(setLength + "");
  btn.setOnClickListener(buttonListener);
} else if (getIntent().hasExtra("Height")) {
   edtNumber2.setText(setHeight + "");
   btn.setOnClickListener(buttonListener);
}

尽管如果情况稍微复杂一些(例如,我想要非常相似的参数化功能),通常最好使用实现 OnClickListener 的内部类。

于 2013-05-07T19:43:31.290 回答
1

要缩短代码,请实现OnClickListener并添加未实现的方法。

为每个按钮设置您的事件处理程序,如下所示:

   btn.setOnClickListener(this);

回到你的onClick() 方法做这样的事情:

   @Override
   public void onClick(View v) {
   switch(v.getId())
   {
   case R.id.btn:
                //TODO Code
                break;
   case R.id.btn2:
                break;    
    }

   }

这应该可以解决您的问题。

于 2013-05-07T20:27:14.997 回答