0

這是我最後一次絕望的嘗試來解決這個問題。Android - EditText dosen't刷新對話框片段

我使用dialogfragment使我的對話窗口MyDialog。該窗口應顯示我發送的分數,然後用戶可以用他們的姓名填寫並確認。那麼我應該能夠找回他們的名字。

我的第一個問題是,應該顯示分數的edittext,不想顯示我設置edittext的分數(它只會顯示新文本,如果它在xml文件中)。然而,我仍然可以從相同的編輯文本中檢索正確的分數(文本)。

第二個問題是由於edittext沒有更新,用戶寫入的文本無法被檢索。但是,可以檢索xml文件在字段中的文本。

看起來edittext在xml文件中生成後不想刷新。

對話框類(採取進口OUT):

public class MyDialog extends DialogFragment 
{ 
private EditText scoreEdit; 
private EditText userEdit; 

private DialogClickListener callback; 
public interface DialogClickListener 
{ 
    public void onFinishedClick(); 
} 
@Override 
public void onCreate(Bundle savedInstanceState) 
{  
     super.onCreate(savedInstanceState); 
     try 
     { 
      callback = (DialogClickListener) getActivity(); 
     }catch(ClassCastException e) 
     { 
      throw new ClassCastException("called class must implement interface"); 
     } 
} 
public static MyDialog newInstance(int title) 
{ 
     MyDialog frag = new MyDialog(); 
     Bundle args = new Bundle();  
     args.putInt("tittel",title); 
     frag.setArguments(args);  
     return frag; 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) 
{ 
    AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity()); 

    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    View inflatedView = inflater.inflate(R.layout.dig_lay, null); 
    scoreEdit = (EditText) inflatedView.findViewById(R.id.dialogScoreEdit); 
    userEdit = (EditText) inflatedView.findViewById(R.id.dialogUsernameEdit); 

    scoreEdit.setText("score supposed to change"); 
    // scoreEdit (edittext) is not changing 

    dialog.setView(inflater.inflate(R.layout.dig_lay, null)); 
    dialog.setTitle("Title"); 
    dialog.setPositiveButton("reg1", new DialogInterface.OnClickListener() 
    { 
     @Override 
     public void onClick(DialogInterface dialog, int whichButton) 
     { 
      System.out.println("new text supposed to be: " + userEdit.getText().toString()); 
      //old text from xml shows 
      callback.onFinishedClick(); 
     } 
    }); 
    setCancelable(false); 
    return dialog.create(); 
} 
} 

的對話窗口中的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/dialogLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:layout_marginTop="16dp" 
    android:layout_marginLeft="4dp" 
    android:layout_marginRight="4dp" 
    android:layout_marginBottom="4dp"> 

     <TextView 
     android:text="score" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
     <EditText 
     android:id="@+id/dialogScoreEdit" 
     android:layout_weight="1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:hint="score here" 
     android:inputType="none"/> 
    </LinearLayout> 

    <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:layout_marginTop="4dp" 
    android:layout_marginLeft="4dp" 
    android:layout_marginRight="4dp" 
    android:layout_marginBottom="16dp" 
    android:fontFamily="sans-serif"> 

     <TextView 
     android:text="Username" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
     <EditText 
     android:id="@+id/dialogUsernameEdit" 
     android:layout_weight="1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:text="retrive this" 
     android:inputType="none"/> 
    </LinearLayout> 
</LinearLayout> 

的dialogwindow的畫面:http://i.stack.imgur.com/EvwSe.png

我已經打過電話的onResume ()並放入新的分數,但edittext仍然不會改變。

我欣賞的任何不良英語作回答,抱歉:)

+0

您是否嘗試過在更改內容後在edittex上調用invalidate()? – marino 2014-09-12 22:58:22

+0

嗨,thx回答:)我只是這樣做:\t \t scoreEdit.setText(「應該改變分數」); scoreEdit.invalidate(); System.out.println(scoreEdit.getText()。toString()); 但我沒有看到窗口中的任何變化,只有在system.out.println() – Madde 2014-09-12 23:04:51

回答

1

它看起來像有一些問題存在。我注意到的有,當你設置你的觀點,你都reinflating觀點,與它設置爲您已設置的觀點,當你做 dialog.setView(inflater.inflate(R.layout.dig_lay, null)); 要設置而不是 dialog.setView(inflatedView);

而且,由於我們無法看到您放入EditText的實際數據,因此我們無法看到它是否爲空等。

最後,我從來沒有看到您運行過scoreEdit.getText(),因此您不會不會檢索用戶對edittext所做的任何更改。

+0

hey :) thx回答正確的答案,我不需要在scoreEdit上運行gettext,因爲我已經知道了分數。如果你的意思是userEdit,那麼它就代表onClick()方法。 無論如何改爲setView(inflatedView)工作:D我現在可以檢索和設置文本,Thx :) – Madde 2014-09-12 23:22:37