2013-01-02 48 views
1

當我運行此代碼時,我收到異常: 無法啓動活動ComponentInfo ... AdminSettingsActivity:Java.lang.NullPointerExcepiton。 任何人都知道,什麼會導致這個問題/異常? 我有以下代碼:PreferenceActivity中的對話框不工作

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.os.Bundle; 
import android.preference.PreferenceActivity; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.LinearLayout; 

public class AdminSettingsActivity extends PreferenceActivity { 

private Dialog dialog; 
Button btn_ok; 
Button btn_cancel; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.admin_preferences); 

    showPasswordDialog(); 
} 

private void showPasswordDialog() { 
    // create dialog 

    dialog = new Dialog(this); 

    dialog.setContentView(R.layout.password_dialog); 
    dialog.setTitle("Type password..."); 



    btn_ok = (Button) findViewById(R.id.btn_ok_pass_dialog); 

    btn_ok.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      dialog.dismiss(); 
      Log.d("", "dismis"); 
     } 
    }); 
    /* 
    btn_cancel = (Button) findViewById(R.id.btn_cancel_pass_dialog); 
    btn_cancel.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      dialog.dismiss(); 
      Log.d("", "ok"); 
     } 
    }); 
    */ 
    dialog.show(); 

} 
} 

並有admin_preference.xml:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 

<Preference android:title="title_web_page" > 
    <intent android:action="cz.example.k2.PASSWORD_DIALOG" /> 
</Preference> 

</PreferenceScreen> 

和password_dialog.xml:

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

<EditText 
    android:id="@+id/edit_text_pass_dialog" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="textPassword" /> 

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

    <Button 
     android:id="@+id/btn_cancel_pass_dialog" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Zrušit" /> 

    <Button 
     android:id="@+id/btn_ok_pass_dialog" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="OK" /> 
</LinearLayout> 

</LinearLayout> 

的manifest.xml:

... 
    <activity 
     android:name="cz.example.k2.AdminSettingsActivity" 
     android:label="@string/admin_settings_activity_label" > 
     <intent-filter> 
      <action android:name="cz.example.k2.ADMIN_SETTINGS" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
... 
+0

你加入清單文件中的活動? –

+0

是的,這是我的AndroidManifest.xml: ... <活動 機器人:名字= 「cz.ecs.regionalarm.AdminSettingsActivity」 機器人:標籤= 「@字符串/ admin_settings_activity_label」> <意圖過濾器> <操作機器人:名稱= 「cz.ecs.regionalarm.ADMIN_SETTINGS」/> <類別機器人:名稱= 「android.intent.category.DEFAULT」/> woodpecker

+0

好,您可以指出哪一行顯示錯誤(來自logcat)? –

回答

0

我的猜測是t他的錯誤是在這裏,你正試圖從主要佈局獲得按鈕不對話框佈局:

btn_ok = (Button) findViewById(R.id.btn_ok_pass_dialog); 

你應該誇大你的對話框佈局,然後拿到按鈕從它

LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
View view = inflater.inflate(R.layout.password_dialog, null); 
dialog.setContentView(view); 
btn_ok = (Button) view.findViewById(R.id.btn_ok_pass_dialog); 
+0

如何充氣對話框?我不知道,這是什麼意思。謝謝。 – woodpecker

+0

在上面的答案中。 – Nermeen

+0

我覺得setContentView對話框會工作,然後dialog.findViewById應該工作 – njzk2