2013-03-05 124 views
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; 
     } 
    }); 
} 

好的。當我在Eclipse的設備模擬器中運行此代碼時,如果這是我第一次在「警報」對話框中爲按鈕1輸入文本,則沒有任何問題,但如果我第二次嘗試輸入代碼,則應用程序會崩潰。我不是Java的專家,但我認爲這是由於「輸入」的「最終」屬性造成的,一旦確定後我無法改變它的值。 我該如何解決它?代碼很簡單,我想以這種方式保留它。

回答

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; 
     } 
    }); 
} 

試試這個,看看這是否正常工作。

+0

@Grishu代碼是相似的,謝謝你們。當我嘗試你的建議時,Eclipse在運行時吐露了這一點:E/AndroidRuntime(531):致命異常:主要java.lang.NullPointerException異常 com.android.internal.app.AlertController $ AlertParams。 (AlertController.java:742) at android.app.AlertDialog $ Builder。 (AlertDialog.java:273) 在com.stufflist.ListStuff $ 1.onLongClick(ListStuff.java:82) 在android.view.View.performLongClick(View.java:2503) 在android.widget.TextView.performLongClick (TextView.java:7640) at android.view.View $ CheckForLongPress.run(View.java:9056) – JoeCoolman 2013-03-05 17:19:26

+0

at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage (Handler.java:92) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:3683) at java.lang.reflect.Method.invokeNative (Native Method)at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java: 839) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) at dalvik.system.NativeStart.main(Native Method) – JoeCoolman 2013-03-05 17:20:01

+0

對不起,你們的建議非常好。我在自己的代碼中犯了一個錯誤。一切都是現在!謝謝。 – JoeCoolman 2013-03-06 03:15:52

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您的對話框。查看代碼,現在它的工作很棒。