2012-08-09 3 views
0

내가 원하는 것은 : 누군가 TextView에서 클릭하면 EditText가있는 AlertDialog가 열리 며, 그 사람이 EditText에 뭔가를 쓰고, "Ok"를 클릭 한 다음 TextView가 무엇으로 설정되었는지 알려줍니다. 그 사람은 EditText에 썼다.AlertDialog 내부의 텍스트 편집

하지만 두 가지 문제점이 있습니다.

첫 번째 : 작동하지 않습니다. "Ok"를 클릭하면 내 앱이 충돌하고 내가 뭘 잘못하고 있는지 알지 못합니다.

두 번째 : 두 개 이상의 TextView가 있으며 각 textview에 대해 새로운 alertdialog를 만들지 않고도 세심한 textview의 텍스트를 설정하는 방법을 알지 못합니다. 대화 상대가 TextView A 또는 B를 클릭했는지 어떻게 확인할 수 있습니까? 아니면 다른 AlertDialog를 생성해야합니까?

내 코드 : 전혀 도움

public class Mec extends Activity implements OnClickListener { 
ImageView iv; 

Button save; 

TextView tSup, tInf; 

EditText txt = null; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.loud); 
    bts(); 
    Bundle extras = getIntent().getExtras(); 
    String vds = extras.getString("omec"); 
    if (vds.equals("Hello")) { 
     iv.setImageResource(R.drawable.world); 
    } 
    else { 
     return; 
    } 
} 
private void bts() { 
    iv = (ImageView) findViewById(R.id.ivID); 
    save = (Button) findViewById(R.id.btSave); 
    tSup = (TextView) findViewById(R.id.txtSuperior); 
    tInf = (TextView) findViewById(R.id.txtInferior); 
    txt = (EditText) findViewById(R.id.et1); 
} 
private void poptxt() { 
    AlertDialog InserirTXT = new AlertDialog.Builder(Mec.this).create(); 
    LayoutInflater infle = getLayoutInflater(); 
    View txtlayout = infle.inflate(R.layout.poptxt, null); 
    InserirTXT.setView(txtlayout); 
    InserirTXT.setButton("OK", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 
      String texto = (String) txt.getText().toString(); 
      tSup.setText(texto); 
     } 
    }); 
    InserirTXT.setCancelable(true); 
    InserirTXT.setCanceledOnTouchOutside(true); 
    InserirTXT.show(); 
} 

public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
    case R.id.btSave: 
     //After 
     break; 

    case R.id.txtSuperior: 
     poptxt(); 
     break; 

    case R.id.txtInferior: 
     poptxt(); 
     break; 
    } 
} 
} 

감사의가!

편집 : 레이아웃 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#FFFFFF" 
android:orientation="vertical" 
android:weightSum="100" > 

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:layout_weight="73.68" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/ivID" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:src="@drawable/badluck" /> 

    <TextView 
     android:id="@+id/txtInferior" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/ivID" 
     android:layout_alignParentLeft="true" 
     android:clickable="true" 
     android:gravity="center" 
     android:onClick="onClick" 
     android:text="Bottom text" 
     android:textColor="#FFFFFF" 
     android:textSize="35dp" 
     style="@style/estilotxt" /> 

    <TextView 
     android:id="@+id/txtSuperior" 
     style="@style/estilotxt" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignTop="@+id/ivID" 
     android:clickable="true" 
     android:editable="true" 
     android:gravity="center" 
     android:onClick="onClick" 
     android:text="Top text" 
     android:textColor="#FFFFFF" 
     android:textSize="35dp" /> 

</RelativeLayout> 

<Button 
    android:id="@+id/btSave" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="20" 
    android:text="Save" /> 

</LinearLayout> 

로그 캣 :

08-08 22:23:55.101: W/dalvikvm(322): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
08-08 22:23:55.121: E/AndroidRuntime(322): FATAL EXCEPTION: main 
08-08 22:23:55.121: E/AndroidRuntime(322): java.lang.NullPointerException 
08-08 22:23:55.121: E/AndroidRuntime(322): at vds.cmc.Mec$1.onClick(Mec.java:89) 
08-08 22:23:55.121: E/AndroidRuntime(322): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158) 
08-08 22:23:55.121: E/AndroidRuntime(322): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-08 22:23:55.121: E/AndroidRuntime(322): at android.os.Looper.loop(Looper.java:123) 
08-08 22:23:55.121: E/AndroidRuntime(322): at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-08 22:23:55.121: E/AndroidRuntime(322): at java.lang.reflect.Method.invokeNative(Native Method) 
08-08 22:23:55.121: E/AndroidRuntime(322): at java.lang.reflect.Method.invoke(Method.java:521) 
08-08 22:23:55.121: E/AndroidRuntime(322): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-08 22:23:55.121: E/AndroidRuntime(322): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-08 22:23:55.121: E/AndroidRuntime(322): at dalvik.system.NativeStart.main(Native Method) 
08-08 22:23:56.950: I/Process(322): Sending signal. PID: 322 SIG: 9 

편집이 : 너희들을 감사드립니다.

AlertDialog 내부에서 txt를 시도했지만 아무 것도 작동하지 않아이 부분을 삭제하고 내가 찾은 튜토리얼로 처음부터 다시 작성하기로 결정했습니다. 이제는 효과가 있지만, 내가 뭘 잘못했는지 아직도 모른다.

감사합니다.

+0

충돌의 경우 LogCat 출력을 게시하십시오. – Eric

+0

문제 2의 경우 tInf.setTag ("textview1")과 같은 것을 사용할 수 있습니다. 그리고 그것을 식별 할 수 있습니다. textView.findViewWithTag ("textview1"); 당신이 아이디어를 얻기를 바랍니다. –

+0

나는 logcat 및 레이아웃으로 게시물을 편집했습니다. –

답변

0

레이아웃 파일과 로그 캣 출력이 여기에 도움이 될 것입니다,하지만도없이 나는 잠재적 인 문제를 볼 수 있습니다 당신의 설명을 감안할 때

String texto = (String) txt.getText().toString(); 
tSup.setText(texto); 

, 내가 txt가 편집 필드가 AlertDialog에 있다고 생각을 , AlertDialog이 생성되기 전에 호출되는 bts() 메서드에서 초기화되므로 null이됩니다. 초기화는 AlertDialog 생성 이후로 이동하십시오.

+0

레이아웃과 LogCat을 모두 게시했습니다. –

+0

그리고 bts()도 옮겨 보았습니다. AlertDialog 다음으로 이동하여 작동하지 않습니다. –

+0

@VictorDomingosSantiago :'txt = (EditText) findViewById (R.id.et1);'줄만 옮기면'bts()'호출 전체가 아니라 다른 문제가 생깁니다! LogCat을 보면,'Mec.this'가 아니라'AlertDialog.Builder builder = new AlertDialog.Builder (getApplicationContext());')를 사용하여 대화 상자를 초기화해야 할 수도 있습니다 ... –

0
public class Mec extends Activity implements OnClickListener { 

    AlertDialog.Builder builder; 
    LinearLayout lila; 
    EditText et; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.loud); 

     builder = new AlertDialog.Builder(this); 
     lila = new LinearLayout(this); 
     et = new EditText(this); 

     lila.addView(et); 

     builder.setView(lila); 
     builder.show(); 
    } 

} 

내부에 EditText가있는 멋진 알림 대화 상자가 있어야합니다. :) 다른 버튼의 onClickListener 안에 builder.show()를 배치하면 해당 버튼을 클릭 할 때만 경고 대화 상자가 표시됩니다. 나는 그것이 당신이 찾고있는 것이기를 바랍니다.

편집 : textviews를 설정하려면 textfield.setText (et.getText())와 같은 말을해야합니다. - 문자열로 캐스팅해야 할 수도 있지만 기본 아이디어입니다 ...

+0

나는 이것에 대해 꽤 새로운데, 나는이 코드를 이해하지 못한다고 생각한다. "이 토큰"후에 "VariantDeclarator가 토큰"에 대한 구문 오류 "AlertDialog.Builder ; "라인. –

+0

죄송합니다, 나는 어리석은 실수를 저질렀습니다. 물론 변수 이름/식별자를 설정해야합니다. 코드를 편집했는데 작동해야합니다. – corecase

1

다음

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/layout_root" 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:padding="10dp" 
      > 
<ImageView android:id="@+id/image" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:layout_marginRight="10dp" 
      /> 
<TextView android:id="@+id/text" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:textColor="#FFF" 
      /> 
</LinearLayout> 

그런 다음 대화 상자를 만들 수있는 XML을 생성하고

Context mContext = getApplicationContext(); 
Dialog dialog = new Dialog(mContext); 

dialog.setContentView(R.layout.custom_dialog); 
dialog.setTitle("Custom Dialog"); 

TextView text = (TextView) dialog.findViewById(R.id.text); 
text.setText("Hello, this is a custom dialog!"); 
ImageView image = (ImageView) dialog.findViewById(R.id.image); 
image.setImageResource(R.drawable.android); 
0

private void poptxt() { 
AlertDialog InserirTXT = new AlertDialog.Builder(Mec.this).create(); 
LayoutInflater infle = getLayoutInflater(); 
View txtlayout = infle.inflate(R.layout.poptxt, null); 
InserirTXT.setView(txtlayout); 
tSup = (TextView) InserirTXT.findViewById(R.id.txtSuperior); //THE PROBLEM 
txt = (EditText) InserirTXT.findViewById(R.id.et1); 
InserirTXT.setButton("OK", new DialogInterface.OnClickListener() { 

    public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub 
     String texto = (String) txt.getText().toString(); 
     tSup.setText(texto); 
    } 
}); 
InserirTXT.setCancelable(true); 
InserirTXT.setCanceledOnTouchOutside(true); 
InserirTXT.show(); 
} 
같은 코드를 만들어 그 내용 없음으로 레이아웃을 설정하는

당신은 내가 있습니다. tSup and txtActivity 컨텍스트로 니 오리 화하고 R.id.txtSuperior and R.id.et1이없는 loud 레이아웃을 설정하십시오. 이 두보기는 내 레이아웃 poptxt에 있습니다. 나 맞아? 그리고 을 poptxt()에 팽창시킵니다. 따라서 Activity's보기가 아닌 대화 상대보기로 초기화하십시오.