2015-10-05 44 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 –