2015-10-05 48 views
0

我有一个相当简单的布局,其中有一个Spinner,它有我自己的适配器连接到它。设置Spinner崩溃布局的选择

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; 
    } 
} 

更新我的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为空只应调用。 您还错过了return convertview标记

+0

你如何解释它可以在另一台屏幕尺寸较小的手机上工作? –

+0

通知我编辑了我的回答, 至于屏幕大小,它会影响调用get view,我有几乎相同的问题,然后意识到视图回收是某些textview变为null或被回收的原因。 –

+0

你也可以忘记回收视图像这里的自定义微调适配器的例子: http://stackoverflow.com/questions/22593026/custom-spinner-adapter-not-working –