我在我的Activity中使用ViewPager
,它有多个片段。在我的Activity的onCreate
方法中,我想向其中一个片段添加多个视图,以便在开始时可以看到它们。问题是我找不到访问该片段的方法。怎么做?我试图以这种方式访问该片段的RecyclerView
:
public class CaafeFragment extends Fragment {
private RecyclerView recyclerView = null;
public CaafeFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_caafe, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.caafeRecyclerView);
return view;
}
public RecyclerView getRecyclerView() {
return (RecyclerView) getView().findViewById(R.id.caafeRecyclerView);
}
}
但是当我从我的活动getRecyclerView()
中调用onCreate()
//活动
public void onCreate()
{
.
.
.
CaafeFragment caafeFragment=new CaafeFragment();
caafeRecyclerView = caafeFragment.getRecyclerView(); // here it returns null
}
答案 0 :(得分:1)
在调用onCreate()
之后(在片段中),调用Fragment的onCreateView()
,因为这是抛出错误,因为你已经在onCreate()方法中声明了recycleview。
查看onCreate(), onCreateView() difference了解更多详情。
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.<specific_function_name>();
答案 1 :(得分:1)
CaafeFragment caafeFragment=new CaafeFragment();
caafeFragment指向什么,它应该引用一个片段,这一行只是创建片段对象。你正试图得到它不包含的东西。您应该指定该对象包含的片段:
CaafeFragment caafeFragment=(CaafeFragment) getFragmentManager().findFragmentById(R.id.YOUR_FRAGMENT_ID);
caafeRecyclerView = caafeFragment.getRecyclerView();
现在caafeFragment对象包含您可以从中访问的内容。
修改强>
您应该在OnCreate()中返回通过“view”设置的private RecyclerView recyclerView
对象,
替换返回(RecyclerView)getView()。findViewById(R.id.caafeRecyclerView);
由:
public RecyclerView getRecyclerView() {
return recyclerView;
}
这里肯定的是,recyclerView对象包含实例化的视图,并且可以跟踪此行以确保在onCreate()中
recyclerView = (RecyclerView) view.findViewById(R.id.caafeRecyclerView);
是否有价值。