如何在 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();

}