如何在 android 中的片段中设置应用程序上下文?
how to set application context in a fragment in android?
我有一个 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 替换上下文。但没有工作。请帮助我
在片段中,onCreate() 在 onCreateView() 之前被调用。这样做的结果是,在调用 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;
}
将 getActivity()
分配给 onCreate
中的上下文。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context=getActivity();
}
我有一个 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 替换上下文。但没有工作。请帮助我
在片段中,onCreate() 在 onCreateView() 之前被调用。这样做的结果是,在调用 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;
}
将 getActivity()
分配给 onCreate
中的上下文。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context=getActivity();
}