2015-02-24 4 views
1

Я создаю приложение для Android, и я нашел проблему. У меня есть активность, и я должен сделать из нее предупреждающий диалог. Это хорошо, но мне нужен спикер в этом диалоговом окне, и я не мог правильно настроить адаптер. Ошибка приложения с помощью NullPointer ex. Кусок Диалог XML с блесны:Как установить адаптер для spinner в диалоговом окне предупреждения

<Spinner 
    android:id="@+id/spinner" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    android:drawSelectorOnTop="true" /> 

А вот код:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my_list); 
    MyListView = (ListView) findViewById(android.R.id.list); 
    registerForContextMenu(MyListView); 
    myList = getIntent().getParcelableArrayListExtra(
      MainActivity.NUMBER_LIST); 
    for (MyCallLog m : myList) { 
     stringList.add(m.getNumber()); 
    } 
    MyListView.setAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, stringList) { 
    }); 
} 

И код Диалог:

public void DialogData(final int DialogTyp) { 
    Context mContext = getApplicationContext(); 
    LayoutInflater inflater = (LayoutInflater) mContext 
      .getSystemService(LAYOUT_INFLATER_SERVICE); 
    final View layout = inflater.inflate(R.layout.dialog, null); 


    AlertDialog.Builder MyBuilder = new AlertDialog.Builder(this); 

    MyBuilder.setPositiveButton("OK", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        if (DialogTyp == 1) { 

        } 

        else if (DialogTyp == 2) { 
         stringList.remove(aktual); 
        } 

        MyListView.invalidateViews(); 
        return; 
       } 
      }); 

    MyBuilder.setNegativeButton("Storno", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        return; 
       } 
      }); 

    if (DialogTyp != 2) 
     MyBuilder.setView(layout); 

    AlertDialog MyAlertDialog = MyBuilder.create(); 

    if (DialogTyp == 0) 
     MyAlertDialog.setTitle("Nový záznam"); 
    else if (DialogTyp == 1) { 
     addItemsOnSpinner(); 
     MyAlertDialog.setTitle("Editace záznamu"); 
     ((EditText)layout.findViewById(R.id.cislo)).setText(myCallLog.getNumber()); 
     ((EditText)layout.findViewById(R.id.delka)).setText(String.valueOf(myCallLog.getDuration())); 
     ((EditText)layout.findViewById(R.id.datum)).setText("25.2.2015"); 
     ((Spinner)layout.findViewById(R.id.spinner)).setSelection(getSelectedOperator(myCallLog.getOperator())); 
    } else if (DialogTyp == 2) { 
     MyAlertDialog.setTitle("Smazání záznamu" + aktual); 
     MyAlertDialog.setMessage("Opravdu chcete smazat vybraný záznam?"); 
    } 

    MyAlertDialog.show(); 
} 

public void editList(int pozition, String number, String date, String spinner){ 

} 

public void addItemsOnSpinner() { 


    List<String> list = new ArrayList<String>(); 
    list.add("O2"); 
    list.add("T_MOBILE"); 
    list.add("VODAFONE"); 
    spinner = (Spinner) findViewById(R.id.spinner); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(
      this, android.R.layout.simple_spinner_item, list); 
     spinner.setAdapter(adapter); 
    } 

Здесь на последней строке должна быть ошибка. Где проблема или что мне нужно сделать, чтобы настроить ее правильно?

+0

Где ваш журнал? – Josef

+0

Spinner in Alert dialog? (Что именно вы хотите получить в AlertDialog или точно Spinner?) – rogerwar

ответ

1

spinner null, потому что вы пытаетесь выполнить findViewById из своей деятельности, которая не является диалоговым макетом. Вместо того, чтобы пройти вертушку вы найденную здесь

((Spinner)layout.findViewById(R.id.spinner)) 

в ваш метод public void addItemsOnSpinner() {...}.

+0

huh, \t Я знал, что это будет что-то вроде этого. Теперь работает. Спасибо за помощь! – Blackess

1

Вы пытаетесь получить Spinner с другой точки зрения, если Spinner находится внутри диалога, то вы должны сделать:

AlertDialog MyAlertDialog = MyBuilder.create(); 
Spinner spinnerInsideDialog = (Spinner) MyAlertDialog.findViewById(R.id.spinner); 
+0

Я знал, что это будет что-то вроде этого, но даже когда я сделал это, я все равно получаю ту же ошибку в той же строке. – Blackess

+0

Теперь у меня другая проблема. Я могу видеть одно из значений в этом spinner, но после того, как я нажму на него, я получил эту ошибку. Невозможно добавить окно - токен null не для приложения. Редактирование: мой плохой я немного устал, я нашел разницу в другой теме, я просто не знал, как ее использовать. – Blackess

Смежные вопросы