getView()和getActivity()有什么区别?

Abd*_*man 6 android android-fragments getview

getView()和之间有什么区别getActivity()

我已经使用了这两种方法,但是不了解基本的区别,即使使用方法在android中也是如此:

ListView deliverItemList = (ListView) getView().findViewById(R.id.load_item_list);
ListView deliverItemList = (ListView) getActivity().findViewById(R.id.load_item_list);
Run Code Online (Sandbox Code Playgroud)

我假设getView()可能会产生NullPointerException,与我分享你的知识,推荐哪种方法?

Bla*_*elt 7

getActivity()返回Activity托管Fragment,而getView()回报的观点你膨胀和返回onCreateView.后者!= null仅在onCreateView返回后返回值

  • 检查`if(getView()!= null){getView().findViewById(R.id.load_item_list); }` (2认同)

yra*_*lik 6

来自android文档:

getActivity()返回此片段当前与之关联的Activity,getView()返回片段布局的根视图(onCreateView(LayoutInflater,ViewGroup,Bundle)返回的视图),如果提供的话.

因此,在您的情况下,通过以下代码行:

getView().findViewById(R.id.load_item_list);
Run Code Online (Sandbox Code Playgroud)

您正在片段中搜索视图,但使用以下代码行:

getActivity().findViewById(R.id.load_item_list);
Run Code Online (Sandbox Code Playgroud)

您正在搜索托管片段的活动中的视图.

关于你使用哪一个的问题,取决于你.如果您尝试对片段进行充气,则需要在onCreateView中对xml进行充气,并使用该充气视图搜索您的视图,如下所示:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.your_layout, container, false);
    ListView lv = (ListView)v.findViewById(R.id.view_id);
}
Run Code Online (Sandbox Code Playgroud)