1

ボタン1、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 つのボタンがそれに応じて応答して警告メッセージを表示しますが、テキストを入力して [OK] をクリックすると、どのボタンがロングクリックされていても、テキストは 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. 2 番目のオーバーライド メソッド onLongClick

    @Override
    public boolean onLongClick(View v) {
    onCheckboxLongClicked(v);
    true を返します。
    }

  3. 無効な onCheckBoxLongClicked メソッドを作成します。または、onLongClick 内で ur swith を実装できます

    switch(view.getId()) {
    case R.id.cbDigits:
    Toast.makeText(getActivity(), "メッセージ", Toast.LENGTH_SHORT).show();
    壊す;
    .
    .
    .
    }

申し訳ありませんが、コードをフォーマットしてインデントする方法はまだわかりません...

于 2013-11-03T20:15:42.150 に答える