Исключение NullPointer при поиске элементов управления даже после отображения представления - PullRequest
0 голосов
/ 21 марта 2012

Я запускаю диалоговое окно, используя этот код:

        //show login dialog
        final Dialog loginDialog = new Dialog(this);

        loginDialog.setTitle(getString(R.string.Login));

        LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View dialogView = li.inflate(R.layout.logindialog, null);
        loginDialog.setContentView(dialogView);
        loginDialog.setCancelable(false);
        loginDialog.show();

        Button cmdLogin = (Button)findViewById(R.id.cmdLogin);
        Button cmdSignup= (Button)findViewById(R.id.cmdSignup);

        if(cmdLogin==null)Log.d("Null Check","cmdLogin");
        if(cmdSignup==null)Log.d("Null Check","cmdSignup");

XML-файл для R.layout.logindialog имеет значение

<?xml version="1.0" encoding="utf-8"?>
<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/txtEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress" 
        android:hint="@string/EmailAddress"
        android:layout_marginTop="10dip"
        android:layout_marginBottom="10dip"
    />
    <EditText
        android:id="@+id/txtPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword" 
        android:hint="@string/Password"    
        android:layout_marginTop="10dip"
        android:layout_marginBottom="10dip"

    />
    <Switch
        android:id="@+id/switchRemember"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/RememberMe"
        android:layout_marginTop="10dip"
        android:layout_marginBottom="10dip"
        android:layout_marginLeft="10dip"        
        android:layout_marginRight="10dip"
         />
    <LinearLayout
        android:id="@+id/ButtonBoxes"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        >

        <Button
            android:id="@+id/cmdSignup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/Signup" />

        <Button
            android:id="@+id/cmdLogin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/Login" />
    </LinearLayout>
</LinearLayout>

Обратите внимание на две проверки на ноль кода Java в первуюфрагмент, они возвращаются ноль.Я не могу найти причину, почему: |

Ответы [ 5 ]

3 голосов
/ 21 марта 2012

Вы должны найти как следует

    Button cmdLogin = (Button)dialogView.findViewById(R.id.cmdLogin);
    Button cmdSignup= (Button)dialogView.findViewById(R.id.cmdSignup);
1 голос
/ 21 марта 2012

Попробуйте это:

        LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View dialogView = li.inflate(R.layout.logindialog, null);
        loginDialog.setContentView(dialogView);
        loginDialog.setCancelable(false);
        loginDialog.show();

        Button cmdLogin = (Button)loginDialog.findViewById(R.id.cmdLogin);
        Button cmdSignup= (Button)loginDialog.findViewById(R.id.cmdSignup);

        if(cmdLogin==null)Log.d("Null Check","cmdLogin");
        if(cmdSignup==null)Log.d("Null Check","cmdSignup");
1 голос
/ 21 марта 2012

Вы должны получить вид из диалогового окна.

    Button cmdLogin = (Button) dialogView.findViewById(R.id.cmdLogin);
    Button cmdSignup= (Button) dialogView.findViewById(R.id.cmdSignup);

findViewById без указанного представления извлечет дочерние представления из представления основного действия. Так что только вы получили ноль.

1 голос
/ 21 марта 2012

Используйте View dialogView для получения кнопок ..

    Button cmdLogin = (Button)dialogView.findViewById(R.id.cmdLogin);
    Button cmdSignup= (Button)dialogView.findViewById(R.id.cmdSignup);
1 голос
/ 21 марта 2012

Прямо сейчас вы ищете в макете активности, а не в макете диалога, ваш код для поиска идентификатора кнопок должен быть таким:

Button cmdLogin = (Button)loginDialog.findViewById(R.id.cmdLogin);
Button cmdSignup= (Button)loginDialog.findViewById(R.id.cmdSignup);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...