如何在android中的片段中设置应用程序上下文?

时间:2015-05-10 11:26:28

标签: android list fragment

我有一个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

2 个答案:

答案 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();

}