【发布时间】:2014-01-28 13:02:59
【问题描述】:
我正在从事这项活动,我有一堆动态微调器。为了设置每一项的项目,我为每个 SpinnerAdapter 设置了一个 List 属性。
为了管理我要更新的微调器项目,我创建了一个私有方法,它应该像工厂模式一样工作,但只返回我需要更新的特定微调器的列表。
在我看来(至少在 Objective-c 中思考)这段代码应该可以工作。
package com.package.demo;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
public class SomeActivity extends Activity implements OnItemSelectedListener {
private int activitySpinners[] = {
R.id.spinner_a,
R.id.spinner_b,
R.id.spinner_c
};
private List<String> spinnerAdapterItemsA;
private List<String> spinnerAdapterItemsB;
private List<String> spinnerAdapterItemsC;
private List<String> teste ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_orders);
for (int i = 0; i < this.activitySpinners.length; i++) {
int spinnerId = this.activitySpinners[i];
Spinner spinner = (Spinner) findViewById(spinnerId);
this.clearArrayAdapterItemsWithPrompt(spinnerId);
this.updateArrayAdapterItemsWithPrompt(spinnerId);
spinner.setOnItemSelectedListener(this);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item, this.adapterItemsForSpinnerId(spinnerId));
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
spinner.setAdapter(adapter);
}
}
private List<String> adapterItemsForSpinnerId(int spinnerId) {
List<String> list = null;
switch (spinnerId) {
case R.id.spinner_a:
list = this.spinnerAdapterItemsA;
break;
case R.id.spinner_b:
list = this.spinnerAdapterItemsB;
break;
case R.id.spinner_c:
list = this.spinnerAdapterItemsC;
break;
default:
return list;
}
return list;
}
private void clearArrayAdapterItemsWithPrompt(int spinnerId) {
List<String> list = this.adapterItemsForSpinnerId(spinnerId);
list = new ArrayList<String>();
}
private void updateArrayAdapterItemsWithPrompt(int spinnerId) {
Spinner spinner = (Spinner) findViewById(spinnerId);
String prompt = (String) spinner.getPrompt();
this.adapterItemsForSpinnerId(spinnerId).add(0, prompt);
}
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
// TODO: Handling Stuff
}
public void onNothingSelected(AdapterView<?> parent) {
// TODO: Handling Stuff
}
}
但是我遇到了 java 空指针异常。当 updateArrayAdapterItemsWithPrompt 尝试设置 List 的提示值时。
【问题讨论】:
-
1.
clearArrayAdapterItemsWithPrompt没用,什么都没做 -
我的猜测是你没有设置提示所以它是空的并且添加抛出 NPE
-
2.不清楚NPE的来源,你可能传递了无效的
spinnerId,请提供异常和堆栈跟踪
标签: java android attributes nullpointerexception factory