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

Ok. Eclipse의 디바이스 시뮬레이터에서이 코드를 실행할 때, 경고 대화 상자에서 버튼 1의 텍스트를 처음 입력하는 경우 아무런 문제가 없지만 두 번째 코드를 입력하려고하면 응용 프로그램이 충돌합니다. 자바의 전문가는 아니지만 이것이 "입력"에 대한 "최종"속성에 의한 것이라고 생각합니다. 한번 결정한 후에는 그 값을 변경할 수 없습니다. 어떻게 해결할 수 있습니까? 코드는 간단하고 그렇게 유지하고 싶습니다.

답변

1

은에서 onCreate에서 빌더 부분을 제거하고이 시도하고이 작동하는지 확인

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

onLongClickListener
로 이동하려고합니다.

+0

@Grishu 코드는 비슷합니다. 감사합니다. 귀하의 제안을 시도하면 이클립스 런타임에 E/AndroidRuntime (531) : 치명적인 예외 : 주 java.lang.NullPointerException com.android.internal.app.AlertController $ AlertParams에서 밖으로 spat. (AlertController.java : 742) android.app.AlertDialog $ Builder. (AlertDialog.java:273) com.stufflist.ListStuff $ 1.onLongClick (ListStuff.java:82) at android.view.View.PolformLongClick (View.java:2503) at android.widget.TextView.performLongClick (TextView.java:7640) android.view.View $ CheckForLongPress.run (View.java:9056) – JoeCoolman

+0

android.os.Handler.handleCallback (Handler.java:587) android.os.Handler.dispatchMessage (Handler.java:92) android.os.Looper.loop (Looper.java:123) at android.app.ActivityThread.main (ActivityThread.java:3683) at java.lang.reflect.Method.invokeNative (네이티브 메소드) 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 (기본 메소드) – JoeCoolman

+0

죄송합니다. 귀하의 제안은 완벽하게 좋습니다. 나는 내 실수로 실수 한 적이있다. 모든 것이 바로 지금입니다! 감사. – JoeCoolman

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 내부에 대화를 정의합니다. 코드를 확인해보십시오.

관련 문제