1

我希望 button1,2,3 响应长按,用户将被提示输入文本的按钮。在 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 个按钮会相应响应以显示警告消息,但是当我输入文本并单击确定时,文本仅在 button3 中更改,无论长按哪个按钮:( 出了什么问题以及如何修复它一个简单的方法?

4

5 回答 5

1

试试这个

button.setOnLongClickListener(new longClcik());


class longClcik implements OnLongClickListener {

    public boolean onLongClick(View v) {
        return false;

    }
}
于 2013-03-11T07:17:26.503 回答
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);
                }
于 2013-03-11T07:17:34.127 回答
1

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

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();
                ((Button)v).setText(newCateg); //<-- see the botonEditable changed to v
            }
        });

        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                // Canceled.
            }
        });        
        alert.show();                   
        return true;
    }
});
于 2013-03-11T07:18:42.270 回答
0

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

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

通过这个

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

加上你的建议:

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

现在,一切都好。谢谢大家,您的帮助使我无法解决问题。
:)

于 2013-03-12T03:48:09.223 回答
0

我这样做:

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

    @Override
    public boolean onLongClick(View v) {
    onCheckboxLongClicked(v);
    返回真;
    }

  3. 创建方法 onCheckBoxLongClicked 无效。或者你可以在 onLongClick 里面实现你的 swith

    switch(view.getId()) {
    case R.id.cbDigits:
    Toast.makeText(getActivity(), "Message", Toast.LENGTH_SHORT).show();
    休息;
    .
    .
    .
    }

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

于 2013-11-03T20:15:42.150 回答