如何在android的片段中设置应用程序上下文?
Posted
技术标签:
【中文标题】如何在android的片段中设置应用程序上下文?【英文标题】:how to set application context in a fragment in android? 【发布时间】:2015-07-20 23:07:00 【问题描述】:我有一个有 2 个选项卡的 ActionBar,每个选项卡布局都是一个片段。在这些选项卡中的 1 个中,有一个 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 替换上下文。但不工作。请帮助meeeee
【问题讨论】:
您没有设置上下文,因此它为空,(至少在您提供的代码上),您可以发布正确的代码吗,您提到使用 getActivity() ,您在哪里使用它跨度> 我的问题解决了。从这里:***.com/questions/20464273/… 解决:上下文上下文 = getActivity(); 【参考方案1】:将getActivity()
与onCreate
中的上下文关联。
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
context=getActivity();
【讨论】:
【参考方案2】:在片段中,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;
【讨论】:
以上是关于如何在android的片段中设置应用程序上下文?的主要内容,如果未能解决你的问题,请参考以下文章
如何在运行时在由 android studio 创建的导航抽屉中设置默认片段
如何在Android的BottomNavigationView中设置填充项