setonlongclicklistener同时为几个按钮

时间:2013-03-11 07:07:31

标签: android onlongclicklistener long-click

我希望button1,2,3响应一个longclick,用户将提示输入文本的按钮。 在onCreate里面我写道:

Button botonEditable;
Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    context = MainActivity.this;
    Resources r = getResources();
    String pName = getPackageName();

    for (int i=1;i<4;i++){
    botonEditable = (Button) findViewById(r.getIdentifier("button" + i, "id", pName));
    botonEditable.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View v) {
            final AlertDialog.Builder alert = new AlertDialog.Builder(context);
            alert.setMessage("Nueva Categoria:");
            final EditText input = new EditText(context);
            alert.setView(input);
            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton  ) {
                    // Do something with value!
                    String newCateg = input.getText().toString();
                    botonEditable.setText(newCateg);
                }
            });

            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    // Canceled.
                }
            });        
            alert.show();                   
            return true;
        }
    });
    }
 }

当测试时,3个按钮会相应地响应以显示警告消息,但是当我输入文本并单击“确定”时,只有在按钮3中更改文本,无论哪个按钮已被长按:( 什么是错的以及如何以简单的方式解决它?

5 个答案:

答案 0 :(得分:1)

试试这个

button.setOnLongClickListener(new longClcik());


class longClcik implements OnLongClickListener {

    public boolean onLongClick(View v) {
        return false;

    }
}

答案 1 :(得分:1)

试试这个..替换以下代码

 public void onClick(DialogInterface dialog, int whichButton  ) {
                    // Do something with value!
                    String newCateg = input.getText().toString();
                    botonEditable.setText(newCateg);
                }

 public void onClick(DialogInterface dialog, int whichButton  ) {
                    // Do something with value!
                    String newCateg = input.getText().toString();
                    ((Button)v).setText(newCateg);
                }

答案 2 :(得分:1)

您应该使用传递给View的{​​{1}}。这将为您提供当前单击的视图并更新其值,因此请执行此操作

OnLongClickListener

答案 3 :(得分:0)

我找到了解决方案,在我的代码中我刚刚替换了行

public boolean onLongClick(View v) {....

这一个

public boolean onLongClick(final View v) {....

加上你的建议:

((Button)v).setText(newCateg.toUpperCase());

现在,一切都很好。 谢谢你们,你的帮助让我以毫米为单位解决了这个问题 :)

答案 4 :(得分:0)

我这样做:

  1. 首先,你必须实现你的类View.OnLongClickListener
  2. 第二个方法onLongClick

      

    @覆盖
          public boolean onLongClick(查看v){
              (ⅴ)onCheckboxLongClicked;
              返回true;
      }

  3. 创建方法onCheckBoxLongClicked,这是无效的。或者你可以在onLongClick上实现你的开关

      

    开关(view.getId()){
             案例R.id.cbDigits:
                  Toast.makeText(getActivity(),“Message”,Toast.LENGTH_SHORT)。show();
                  打破;
      。
      。
      。
      }

  4. 很抱歉,但我仍然不知道如何格式化代码以缩进...