setAdapter上的Android Spinner适配器null异常
我是Android开发的新手,我在旋转器方面遇到了一些麻烦。 我的活动有两个微调器,我正在尝试在选择第一个微调器之后填充第二个微调器 第一个微调器的填充方法很好,第二个微调器的返回数组也很好,但是当我执行setAdapter上的Android Spinner适配器null异常,android,exception,null,spinner,adapter,Android,Exception,Null,Spinner,Adapter,我是Android开发的新手,我在旋转器方面遇到了一些麻烦。 我的活动有两个微调器,我正在尝试在选择第一个微调器之后填充第二个微调器 第一个微调器的填充方法很好,第二个微调器的返回数组也很好,但是当我执行spin2.setAdapter(adapter)时,抛出一个NullPointerException 我放置了一个Toast.show(),以查看在第二个微调器上为我提供值的方法是否有效,它是否有效。就在我移除setAdapter()时,应用程序没有崩溃。但是,第二个微调器也是空的 我将代码放
spin2.setAdapter(adapter)
时,抛出一个NullPointerException
我放置了一个Toast.show()
,以查看在第二个微调器上为我提供值的方法是否有效,它是否有效。就在我移除setAdapter()
时,应用程序没有崩溃。但是,第二个微调器也是空的
我将代码放在片段中,以查看我做错了什么:
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_info_de_lineas,
container, false);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
Spinner spin = (Spinner)getActivity().findViewById(R.id.spEmpresa);
AccesoADatos db = new AccesoADatos(getActivity().getApplicationContext());
SQLiteDatabase database = db.getWritableDatabase();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Cursor cursor = db.getAllEmpresas();
if(cursor.moveToFirst()){
do{
adapter.add(cursor.getString(1));
} while(cursor.moveToNext());
}
spin.setAdapter(adapter);
Spinner spin2 = (Spinner)getActivity().findViewById(R.id.spEmpresa);
spin2.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View v, int pos,
long id) {
Spinner spinLineas = (Spinner)parent.findViewById(R.id.spLinea);
Spinner spinEmpresa = (Spinner)parent.findViewById(R.id.spEmpresa);
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(parent.getContext(),android.R.layout.simple_spinner_item);
//
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
int posicion = spinEmpresa.getSelectedItemPosition();
int idpos = (int) spinEmpresa.getItemIdAtPosition(posicion);
AccesoADatos db = new AccesoADatos(parent.getContext());
SQLiteDatabase database = db.getWritableDatabase();
Cursor cursor2 = db.getAllLineas(idpos);
if(cursor2.moveToFirst()){
do{
adapter2.add(cursor2.getString(1));
Toast.makeText(parent.getContext(), "Linea "+ cursor2.getString(1), Toast.LENGTH_LONG).show();
} while(cursor2.moveToNext());
}
spinLineas.setAdapter(adapter2);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
}
公共静态类占位符片段扩展片段{
公共占位符片段(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u info\u de\u lineas,
货柜(虚假);;
返回rootView;
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
微调器自旋=(微调器)getActivity().findViewById(R.id.spEmpresa);
AccesoADatos db=新的AccesoADatos(getActivity().getApplicationContext());
SQLiteDatabase=db.getWritableDatabase();
ArrayAdapter=新的ArrayAdapter(getActivity(),android.R.layout.simple\u微调器\u项);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
Cursor Cursor=db.getAllEmpresas();
if(cursor.moveToFirst()){
做{
adapter.add(cursor.getString(1));
}while(cursor.moveToNext());
}
spin.setAdapter(适配器);
微调器spin2=(微调器)getActivity().findViewById(R.id.spEmpresa);
spin2.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共位置(AdapterView父视图、视图v、内部位置、,
长id){
微调器spinLineas=(微调器)parent.findViewById(R.id.spLinea);
微调器spinEmpresa=(微调器)parent.findViewById(R.id.spEmpresa);
ArrayAdapter adapter2=新的ArrayAdapter(parent.getContext(),android.R.layout.simple\u微调器\u项);
//
adapter2.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
int posicion=spinEmpresa.getSelectedItemPosition();
int idpos=(int)spinEmpresa.getItemIdAtPosition(posicion);
AccesoADatos db=新的AccesoADatos(parent.getContext());
SQLiteDatabase=db.getWritableDatabase();
游标游标2=db.getAllLineas(idpos);
if(cursor2.moveToFirst()){
做{
adapter2.add(cursor2.getString(1));
Toast.makeText(parent.getContext(),“Linea”+cursor2.getString(1),Toast.LENGTH_LONG.show();
}while(cursor2.moveToNext());
}
spinLineas.setAdapter(适配器2);
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});
}
}
更换:
Spinner spin = (Spinner)getActivity().findViewById(R.id.spEmpresa);
与:
同样适用于spin2…非常感谢!但仅仅更换这两条线路是行不通的。所以我把所有的“parent”都改为“getActivity()”,这样效果会很好。再次感谢!!
Spinner spin = (Spinner)getView().findViewById(R.id.spEmpresa);