يتعطل AlertDialog المخصص مع مربع الحوار ذي الموضوع عند إضافة View.onClickListener

StackOverflow https://stackoverflow.com//questions/11649351

سؤال

أنا أستخدم نشاطًا يحتوي على Theme.Dialog لإجراء AlertDialog الخاص بي حيث أحاول استخدام مربع الحوار هذا داخل BroadcastReceiver ولكن عندما أضفت OnClickListener، يتعطل التطبيق في كل مرة يتم تشغيله.

شفرة:

package nyp.android.project;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class PasswordDialog extends Activity {

    private static final String TAG = "Logging Activity";
    //Context context;   
    Button login;
    EditText inputPassword;

    private static final int MY_PASSWORD_DIALOG_ID = 0;

    protected void onCreate(Bundle savedInstanceState) 
    {
        //this.context = context;
        super.onCreate(savedInstanceState);
        setContentView (R.layout.password_dialog);

        //SharedPreferences passwdfile = context.getSharedPreferences(    
        //        PhoneFinder.PASSWORD_PREF_KEY, 0); 

        //String correctSHA1 = passwdfile.getString(PhoneFinder.PASSWORD_PREF_KEY, null);

        login = (Button) findViewById(R.id.loginPassword);
        inputPassword = (EditText) findViewById(R.id.btnLogin);

        login.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
              Toast.makeText(PasswordDialog.this, "Hello World!", Toast.LENGTH_LONG).show();
            }
        });
        }

    }

لوجكات:

07-25 12:27:30.354: D/AndroidRuntime(570): Shutting down VM
07-25 12:27:30.354: W/dalvikvm(570): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
07-25 12:27:30.364: E/AndroidRuntime(570): FATAL EXCEPTION: main
07-25 12:27:30.364: E/AndroidRuntime(570): java.lang.RuntimeException: Unable to start activity ComponentInfo{nyp.android.project/nyp.android.project.PasswordDialog}: java.lang.ClassCastException: android.widget.EditText
07-25 12:27:30.364: E/AndroidRuntime(570):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
07-25 12:27:30.364: E/AndroidRuntime(570):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-25 12:27:30.364: E/AndroidRuntime(570):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-25 12:27:30.364: E/AndroidRuntime(570):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-25 12:27:30.364: E/AndroidRuntime(570):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-25 12:27:30.364: E/AndroidRuntime(570):  at android.os.Looper.loop(Looper.java:123)
07-25 12:27:30.364: E/AndroidRuntime(570):  at android.app.ActivityThread.main(ActivityThread.java:4627)
07-25 12:27:30.364: E/AndroidRuntime(570):  at java.lang.reflect.Method.invokeNative(Native Method)
07-25 12:27:30.364: E/AndroidRuntime(570):  at java.lang.reflect.Method.invoke(Method.java:521)
07-25 12:27:30.364: E/AndroidRuntime(570):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-25 12:27:30.364: E/AndroidRuntime(570):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-25 12:27:30.364: E/AndroidRuntime(570):  at dalvik.system.NativeStart.main(Native Method)
07-25 12:27:30.364: E/AndroidRuntime(570): Caused by: java.lang.ClassCastException: android.widget.EditText
07-25 12:27:30.364: E/AndroidRuntime(570):  at nyp.android.project.PasswordDialog.onCreate(PasswordDialog.java:38)
07-25 12:27:30.364: E/AndroidRuntime(570):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-25 12:27:30.364: E/AndroidRuntime(570):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-25 12:27:30.364: E/AndroidRuntime(570):  ... 11 more

ملف XML:

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

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:padding="10dip" >


        <!--  Password Label -->
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dip"
            android:text="Password" />
        <!--  Password TextField -->

        <EditText
            android:id="@+id/loginPassword"
            android:layout_width="260dp"
            android:layout_height="wrap_content"
            android:password="true" />

        <!--  Login Button -->        
        <Button
            android:id="@+id/btnLogin"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dip"
            android:text="Login" />

    </LinearLayout>
هل كانت مفيدة؟

المحلول

java.lang.ClassCastException: android.widget.EditText

انظر خط الخطأ أعلاه،أنت تحاول إجراء مراجع مرجعية لـ EditText، وليس Button...

نصائح أخرى

alertdialog لا يمكن أن يتم إنشاؤها من فئة BroadCastReceiver، يرجى الاطلاع على

هذا

هذا بسبب تحديد هويتك EditTextمعرف كما Buttonمعرف.لذا حاول أن تفعل كما هو موضح أدناه -

login = (Button) findViewById(R.id.btnLogin);
inputPassword = (EditText) findViewById(R.id.loginPassword);

هذا هو المكان المحدد الذي يأتي فيه الخطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top