我有一个ActionBar,它有2个标签,每个标签布局都是一个片段。在其中一个选项卡中,有一个listView。我想为它设置ArrayAdapetr。但当我运行应用程序时,出现错误,错误是关于我的应用程序上下文。我的代码是:
public class TarfandFrag extends Fragment {
String values[] = new String[]{"sadeq","ali"};
ListView listView;
Context context;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tarfad_layout,container,false);
listView = (ListView) view.findViewById(R.id.list_tarfand);
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayAdapter adapter = new ArrayAdapter(context,android.R.layout.simple_list_item_1,values);
listView.setAdapter(adapter);
}
}
但它不起作用。请注意,我不想使用listFragment或其他任何东西。我用getActivity(),context.getApplicationContext,getActivity.getApplicationContext替换上下文。但没有工作。 PLZ帮助meeeee
答案 0 :(得分:0)
在片段中,在onCreateView()之前调用onCreate()。这样做的结果是,在调用onCreate()时,你的ListView还没有与布局中的元素相关联(因为你在onCreateView()中这样做,后来被调用),因此将解析为null当您为ListView设置适配器时,您将获得空指针异常。将设置适配器的代码移动到onCreateView()方法中并使用getActivity(),你应该没问题。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tarfad_layout,container,false);
listView = (ListView) view.findViewById(R.id.list_tarfand);
// Here listview will not be null as it is now bound to an object
ArrayAdapter adapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,values);
listView.setAdapter(adapter);
return view;
}
答案 1 :(得分:0)
在getActivity()
中确认onCreate
上下文。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context=getActivity();
}