Кастомизация диалогов

Интерфейс, диалоги, темы, стили, меню
Ответить
v_grechka
Сообщения: 20
Зарегистрирован: 09 авг 2012, 13:30

Кастомизация диалогов

Сообщение v_grechka » 09 авг 2012, 13:55

есть файл Dialog.xml в котором реализованы элементы для диалога
несколько TextView и 2 Spinner и 2 кнопки

Код: Выделить всё

 <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >



        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:text="Дата" />
        
                <EditText
            android:id="@+id/data_field"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:inputType="date" >

            <requestFocus />

        </EditText>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:text="Показание"
            android:inputType="number"
             />

        <EditText
            android:id="@+id/pok"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true" >
        </EditText>
    </LinearLayout>


    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2.54" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:text="Источник" />
                   <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:text="Примечание" />

        <EditText
            android:id="@+id/note"
            android:layout_width="fill_parent"
            android:layout_height="84dp"
            android:layout_alignParentRight="true" />
    </LinearLayout>
    
            <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2.54" >

        <TextView
            android:layout_width="103dp"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:text="Причина невыполнения" />
                   <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    </LinearLayout>
Код процедуры вызова диалога

Код: Выделить всё

    private void CallEditContactDialog(long abon_id,String data_field,String pok_field,String Abon_Name_field) {
        LayoutInflater inflater = LayoutInflater.from(this);
        View root = inflater.inflate(R.layout.dialog, null);
        
        final EditText textData = (EditText)root.findViewById(R.id.data_field);                 
        final EditText textPok = (EditText)root.findViewById(R.id.pok);
        if (data_field==""){ textData.setText(GetDateNow());}
        else { textData.setText(data_field);}
        

     	
        AlertDialog.Builder b = new AlertDialog.Builder(this);
        b.setView(root);
        b.setTitle("Edit "+Abon_Name_field);
    
  
        b.setPositiveButton(
        		
                R.string.btn_ok, new DialogInterface.OnClickListener() {
                	
            public void onClick(DialogInterface dialog, int whichButton) {
                     	
            }
        });
        
        b.setNegativeButton(
                R.string.btn_cancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {}
        });
        
        b.show(); 
       
    }
есть процедура заполнения спиннера массивом из файла strings.xml

Код: Выделить всё

    public void getSpinner(String[] sss,int sp_id)
    {
   
    	ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, sss);
  
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

     	Spinner sp1 = (Spinner) findViewById(sp_id);
     	sp1.setAdapter(adapter);
      
    }
Собственно вопрос. Если я вызываю процедуру getSpinner для спиннера на основной активности - все ОК.
Как только пытаюсь вызвать внутри CallEditContactDialog для спинера файла dialog.xml вываливается ошибка.
Причем ошибка на сопоставлении адаптера и спинера sp1.setAdapter(adapter); NullPointerException. Хееелп!!!!!

v_grechka
Сообщения: 20
Зарегистрирован: 09 авг 2012, 13:30

Re: Кастомизация диалогов

Сообщение v_grechka » 10 авг 2012, 11:51

А ларчик просто открывался....
Необходимо было при ссылке на спинеры

Код: Выделить всё

 Spinner sp1 = (Spinner) findViewById(sp_id)
указать root. т.е.

Код: Выделить всё

 Spinner sp1 = (Spinner) root.findViewById(sp_id)
т.е. прога пыталась найти этот элемент на основной layout(main.xml), а не dialog.xml
А клипса могла бы и подсказать, а не валиться без объяснений :(

Ответить