2013-10-25 29 views
0

我試圖將對話框中編輯文本的值傳遞給同一活動的文本視圖。 我使用2個單獨的xml文件進行對話和活動。將編輯文本(由用戶輸入)傳遞給文本視圖

當運行我的代碼我收到錯誤不能施放編輯文本到文本視圖: 請讓我知道我做錯了....

我的代碼:

public class Water extends Activity implements OnClickListener{ 

    Button water, date; 


    private DatePicker date_picker; 
    static final int DATE_DIALOG_ID = 100; 
    private static final int DIALOG_TEXT_ENTRY_LOG = 1; 

    SimpleDateFormat formatter; 
    String result; 

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

     water.setOnClickListener(this); 

     final Calendar calendar = Calendar.getInstance(); 
     formatter = new SimpleDateFormat("EEE, MMM d, yyyy"); 
     // 3-lettermonth name & 2-char day of month 
     date.setText(formatter.format(calendar.getTime())); 

    } 

    private void initialize() { 
     // TODO Auto-generated method stub 
     water = (Button) findViewById(R.id.bGlassOfWater); 
     date = (Button) findViewById(R.id.bDateWater); 

    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch(v.getId()){ 

     case R.id.bDateWater: 

      break; 
     case R.id.bGlassOfWater: 
      showDialog (DIALOG_TEXT_ENTRY_LOG); 
      break; 

     } 
    } 

     @Override 
     public Dialog onCreateDialog(int id) { 
      switch (id) { 
      case DIALOG_TEXT_ENTRY_LOG: 
      LayoutInflater wat = LayoutInflater.from(this); 
      final View textEntryViewAcc = wat.inflate(R.layout.glass_of_water, null); 
      return new AlertDialog.Builder(Water.this) 
        //.setIconAttribute(android.R.attr.alertDialogIcon) 
        .setTitle(R.string.Water) 
        .setView(textEntryViewAcc) 
        .setPositiveButton(R.string.alert_dialog_save, 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int whichButton) { 

            /* User clicked OK so do some stuff */ 
            LayoutInflater wat = LayoutInflater.from(Water.this); 
            final EditText glwat= (EditText) ((EditText) dialog).findViewById(R.id.etGlasesOfWater); 
            result = glwat.getText().toString(); 
            TextView tvwater = (TextView)findViewById(R.id.tvGlassOfWater); 
            tvwater.setText(result); 
           } 


          }) 
        .setNegativeButton(R.string.alert_dialog_cancel, 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, 
             int whichButton) { 

            /* User clicked cancel so do some stuff */ 
            dialog.dismiss(); 
           } 
          }) 

          .create(); 
     } 

     return null; 
     } 

} 

對話框XML:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <EditText 
     android:id="@+id/etGlasesOfWater" 
     android:layout_width="173dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginRight="27dp" 
     android:layout_marginTop="25dp" 
     android:layout_toLeftOf="@+id/tvGlasses" 
     android:ems="10" 
     android:gravity="center_horizontal" 
     android:scrollHorizontally="true" 
     android:textAppearance="?android:attr/textAppearanceMedium" > 

     <requestFocus /> 
    </EditText> 

    <TextView 
     android:id="@+id/tvGlasses" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/etGlasesOfWater" 
     android:layout_alignBottom="@+id/etGlasesOfWater" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="19dp" 
     android:gravity="left" 
     android:text="glasses" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

</RelativeLayout> 

主要活動XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="top" 
    android:background="@drawable/ic_gradient_blue_3" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/tvTrackIt" 
     android:layout_width="wrap_content" 
     android:layout_height="40sp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:background="@drawable/ic_green_diary" 
     android:gravity="center_vertical|left" 
     android:paddingLeft="60sp" 
     android:text="@string/Track" 
     android:textSize="20sp" 
     android:textStyle="bold|italic" /> 

    <Button 
     android:id="@+id/bDateWater" 
     android:layout_width="150dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/tvTrackIt" 
     android:text="" /> 

    <Button 
     android:id="@+id/bDone" 
     android:layout_width="310dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:background="@drawable/done_but_gradient" 
     android:text="Done" 
     android:textStyle="bold" 
     android:layout_marginBottom="4dp"/> 

    <TextView 
     android:id="@+id/tvGlassOfWater" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/bGlassOfWater" 
     android:layout_centerHorizontal="true" 
     android:text="" 
     android:textStyle="bold"/> 

    <Button 
     android:id="@+id/bGlassOfWater" 
     android:layout_width="230dp" 
     android:layout_height="130dp" 
     android:layout_below="@+id/bDateWater" 
     android:layout_centerHorizontal="true" 
     android:background="@drawable/ic_water_glass" 
     android:gravity="top|center_horizontal" 
     android:text="Amount of Water" 
     android:textStyle="bold|italic" /> 

</RelativeLayout> 

登錄結果:

10-25 16:01:07.648: E/AndroidRuntime(5305): FATAL EXCEPTION: main 
10-25 16:01:07.648: E/AndroidRuntime(5305): java.lang.ClassCastException: android.app.AlertDialog cannot be cast to android.widget.EditText 
10-25 16:01:07.648: E/AndroidRuntime(5305):  at com.margaret.app.easypeasycooking.Water$1.onClick(Water.java:86) 
10-25 16:01:07.648: E/AndroidRuntime(5305):  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 
10-25 16:01:07.648: E/AndroidRuntime(5305):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-25 16:01:07.648: E/AndroidRuntime(5305):  at android.os.Looper.loop(Looper.java:137) 
10-25 16:01:07.648: E/AndroidRuntime(5305):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
10-25 16:01:07.648: E/AndroidRuntime(5305):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-25 16:01:07.648: E/AndroidRuntime(5305):  at java.lang.reflect.Method.invoke(Method.java:525) 
10-25 16:01:07.648: E/AndroidRuntime(5305):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
10-25 16:01:07.648: E/AndroidRuntime(5305):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-25 16:01:07.648: E/AndroidRuntime(5305):  at dalvik.system.NativeStart.main(Native Method) 
+1

你不需要任何附近的代碼量。 – nhgrif

+0

你能記錄結果 – Akshay

+0

@Akshay - 我已經發布日誌結果 – Alfie

回答

0

解決方案: 只好在前面的代碼定義編輯文本,那麼是很容易調整肯定按鈕:

@Override 
     public Dialog onCreateDialog(int id) { 
      switch (id) { 
      case DIALOG_TEXT_ENTRY_LOG: 
      LayoutInflater wat = LayoutInflater.from(this); 
      final View textEntryViewAcc = wat.inflate(R.layout.glass_of_water, null); 
      final EditText glwater = (EditText) textEntryViewAcc.findViewById(R.id.etGlasesOfWater); 
      return new AlertDialog.Builder(Water.this) 
        //.setIconAttribute(android.R.attr.alertDialogIcon) 
        .setTitle(R.string.Water) 
        .setView(textEntryViewAcc) 
        .setPositiveButton(R.string.alert_dialog_save, 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int whichButton) { 

            String result = glwater.getText().toString(); 
            TextView tvwater = (TextView)findViewById(R.id.tvGlassOfWater); 
            tvwater.setText(result); 

感謝@codeMagic的幫助:)

0

檢查你的XML,它看起來像tvGlassOfWaterEditText,但你想轉換爲TextView在Java代碼中。

TextView tvwater = (TextView)findViewById(R.id.tvGlassOfWater); 

如果是在XML文件中的TextView那麼請發表您的logcat和相關的XML代碼。

+0

我已經添加了兩個xmls ...我試圖將信息從編輯文本發送到文本視圖。 – Alfie

+0

你會得到這個錯誤? – codeMagic

+0

上傳日誌貓。 – Alfie

0

因爲你的鑄造DialogEditText。試試吧。

final EditText edit = (EditText)dialog.findViewById(R.id.editText); 
final TextView text = (TextView)dialog.findViewById(R.id.textView); 
+0

請添加一些關於您的解決方案的意見爲什麼以及如何解決問題 –

+0

現在,你可以輕鬆地解決它與更新的答案 – Mohit

相關問題