2015-10-05 2 views
0

У меня довольно простая компоновка с Spinner, в которой есть мой собственный адаптер.Настройка выбора на макете Spinner crashes

MyAdapter myAdap = new MyAdapter(); 
mySpinner.setAdapter(myAdap); 

Адаптер имеет два элемента (от отладчика):

myAdap.getCount() = 2 

Когда я устанавливаю выбор для 1 хотя (0 работ),

mySpinner.setSelection(1); 

в приложение аварии:

10-05 19:37:17.122 19899-19899/nl.example.demo E/test: Exception 10-05 19:37:17.142 19899-19899/nl.example.demo E/AndroidRuntime: FATAL EXCEPTION: main 
10-05 19:37:17.142 19899-19899/nl.example.demo E/AndroidRuntime: Process: example.demo, PID: 19899 10-05 19:37:17.142 19899-19899/nl.example.demo E/AndroidRuntime: java.lang.NullPointerException 
10-05 19:37:17.142 19899-19899/nl.example.demo E/AndroidRuntime:  at android.widget.TextView.makeNewLayout(TextView.java:6151) 
10-05 19:37:17.142 19899-19899/nl.example.demo E/AndroidRuntime:  at android.widget.TextView.onMeasure(TextView.java:6427) 
10-05 19:37:17.142 19899-19899/nl.example.demo E/AndroidRuntime:  at android.view.View.measure(View.java:16643) 
[..] 

Странно, что это работает на другом телефоне с той же версией Android, но на меньшем экране.

MyAdapter выглядит следующим образом:

public class MyAdapter extends ArrayAdapter<String> { 
    static ArrayList<String> methods = null; 
    private LayoutInflater mInflater; 

    public MyAdapter(Context ctx) { 
     super(ctx, 0); 
     mInflater = LayoutInflater.from(ctx); 
     if (methods == null) { 
      methods = new ArrayList<String>(); 
      methods.add("1"); 
      methods.add("2"); 
      methods.add("3"); 
     } 
    } 

    @Override 
    public int getCount() { 
     return methods.size(); 
    } 

    @Override 
    public String getItem(int position) { 
     return methods.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = mInflater.inflate(android.R.layout.simple_spinner_item, null); 
     } 
     TextView tvLabel = (TextView)convertView.findViewById(android.R.id.text1); 
     tvLabel.setText("test"); 
     return convertView; 
    } 
} 

Update мой Nexus 6 не есть проблема.

+0

Ошибка в вашем «TextView», пожалуйста, поделитесь своим классом MyAdapter –

+0

@RahulParihar обновил мой вопрос –

+0

Вы уверены, что это Java? – Onik

ответ

0

Я думаю, что вы должны изменить код следующим образом:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = mInflater.inflate(android.R.layout.simple_spinner_item, null); 
TextView tvLabel = (TextView)convertView.findViewById(android.R.id.text1); 

     }else{ 
     tvLabel.setText("test"); 
     return convertView;} 
    } 

, как findViewById следует назвать только тогда, когда convertview равна нулю. также у вас не было обратного конвертированного тега

+0

Как вы объясните, что он работает на другом телефоне с меньшим размером экрана? –

+0

замечает, что я отредактировал свой ответ, Что касается размера экрана, это влияет на вызов get view, у меня была почти такая же проблема, а затем поняли, что переработка представления является причиной того, что определенный textview станет нулевым или будет переработан. –

+0

вы также можете забыть о просмотрах видов рециркуляции, таких как этот пример пользовательского адаптера-счетчика здесь: http://stackoverflow.com/questions/22593026/custom-spinner-adapter-not-working –

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