如何在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活动中设置片段的形状和透明度

如何在Android的BottomNavigationView中设置填充项

如何在 android 中设置 ViewPage 及其适配器?

如何在Android中设置按钮点击效果?