0

ユーザーがボタンのテキストを何度も変更したい。そのために、彼はそのボタンを長押しします。これはコードです:

@Override
public void onCreate(Bundle savedInstanceState) {

//blah blah

    final AlertDialog.Builder alert = new AlertDialog.Builder(this);

    alert.setMessage("Nueva Categoria:");

    // Seting an EditText view to get user input 
    final EditText input = new EditText(this);
    alert.setView(input);

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        Button esteBoton = (Button) findViewById(R.id.button1);
        String newCateg = input.getText().toString();
        esteBoton.setText(newCateg);
      }
    });       


    Button button = (Button) findViewById(R.id.button1);
    button.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View v) {
            alert.show();               
            return true;
        }
    });
}

Ok。このコードを Eclipse のデバイス シミュレータで実行すると、アラート ダイアログのボタン 1 に最初にテキストを入力する場合は問題ありませんが、2 回目にコードを入力しようとするとアプリケーションがクラッシュします。私はJavaの専門家ではありませんが、これは「入力」の「最終」属性によるものだと思います。一度決定した後、その値を変更することはできません。どうすれば修正できますか?コードはシンプルなので、そのままにしておきたいと思います。

4

2 に答える 2

1

onCreate のビルダー部分を削除して、onLongClickListener に移動してみてください

Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.symptoms);
    button = (Button) findViewById(R.id.btDone);

    // final Dialog alert = builder.create();

    button.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View v) {

            // Declare your builder here - 
            final AlertDialog.Builder builder = new AlertDialog.Builder(
                    YOURACTIVITY.this);
            builder.setMessage("Nueva Categoria:");
            // Seting an EditText view to get user input
            final EditText input = new EditText(YOURACTIVITY.this);
            builder.setView(input);
            builder.setPositiveButton("Ok",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int whichButton) {
                            String newCateg = input.getText().toString();
                            button.setText(newCateg);
                        }
                    });

            builder.show();
            return true;
        }
    });
}

これを試して、これが機能するかどうかを確認してください。

于 2013-03-05T06:36:45.477 に答える
0

以下のコードを試してください:

 public class MainActivity extends Activity {
           Button button;
           Context context;
     @Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    context = MainActivity.this;
    setContentView(R.layout.activity_main);
    button = (Button) findViewById(R.id.button1);
    button.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View v) {
            final AlertDialog.Builder alert = new AlertDialog.Builder(
                    context);
            alert.setMessage("Nueva Categoria:");
            // Seting an EditText view to get user input
            final EditText input = new EditText(context);
            alert.setView(input);
            alert.setPositiveButton("Ok",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int whichButton) {
                            String newCateg = input.getText().toString();
                            button.setText(newCateg);
                        }
                    });
            AlertDialog build = alert.create();
            build.show();
            return true;
        }
    });
 }
  }

ボタンのonLongClickListener内でダイアログを定義します。コードをチェックしてください、その動作は今素晴らしいです。

于 2013-03-05T05:30:18.757 に答える