2013-10-31 56 views
0

即時嘗試創建自定義對話框,但即時調用show()函數時出現錯誤。我不確定是否錯過了創建對話框的一些步驟。下面的代碼:

public class TrackerSettingsActivity extends Activity { 
Context context; 
PhoneStateBroadcastReciever prefs; 
Handler handler; 
SharedPreferences m_sharedPrefs; 
Editor editor; 

EditText timerDelay; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.tracker_settings); 

    timerDelay = (EditText) findViewById(R.id.editText_Set_Timer); 
    m_sharedPrefs = getSharedPreferences("MyPrefs", 0); 
    editor = m_sharedPrefs.edit(); 

    Button button = (Button) findViewById(R.id.button_Confirm); 
    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      customDialog().show(); 

     } 
     } 
private Dialog customDialog() { 
    final Dialog dialog = new Dialog(getBaseContext()); 
    dialog.setContentView(R.layout.login_dialog); 
    dialog.setTitle("Title..."); 

    // set the custom dialog components - text, image and button 
    TextView text = (TextView) dialog.findViewById(R.id.text); 
    text.setText("Android custom dialog example!"); 
    ImageView image = (ImageView) dialog.findViewById(R.id.image); 
    image.setImageResource(R.drawable.ic_launcher); 

    Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK); 
    // if button is clicked, close the custom dialog 
    dialogButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      dialog.dismiss(); 
     } 
    }); 

    return dialog; 
} 


} 

login_dialog.xml:

<ImageView 
    android:id="@+id/image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="5dp" 
    android:src="@drawable/ic_launcher" /> 

<TextView 
    android:id="@+id/text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/image" 
    android:text="sss" 
    android:textColor="#FFF" /> 

<Button 
    android:id="@+id/dialogButtonOK" 
    android:layout_width="100px" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/text" 
    android:text=" Ok " /> 

tracker_settings.xml:

<TextView 
    android:id="@+id/textView_Set_Timer" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="68dp" 
    android:text="@string/tv_settimer" 
    android:textColor="#ffffff" /> 

<EditText 
    android:id="@+id/editText_Set_Timer" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignRight="@+id/textView_Set_Timer" 
    android:layout_below="@+id/textView_Set_Timer" 
    android:ems="10" 
    android:inputType="number" 
    android:textColorHint="#ffffff" /> 

<Button 
    android:id="@+id/button_Confirm" 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/editText_Set_Timer" 
    android:onClick="click" 
    android:text="@string/bn_confirm" /> 

我不知道爲什麼顯示()無法正常工作...... 如果有人有一些其他建議我願意聽... 在此先感謝!

+3

什麼是錯誤的頂部您的對話框? – puelo

+0

Thread [<1> main](暫停(異常WindowManager $ BadTokenException)) – pavle

+0

Dialog.show()行:286 – pavle

回答

2

使用此:在必須創建對話框時使用活動引用。

Actvity activity = this; 
private Dialog customDialog() { 
    final Dialog dialog = new Dialog(activity); // or new Dialog(YourActivity.this); 
    dialog.setContentView(R.layout.login_dialog); 
    .... 

} 
+1

它的工作,謝謝... – pavle

1

您的自定義對話框由於沒有父視圖而無法添加。正如@jzafrilla所說的,爲你的構造函數添加一個活動引用,這樣android就知道把它附加到什麼地方。

... = new Dialog(Main.this); // or something similar 

如果你這樣做,那麼你應該能夠看到父視圖