如何在onCreate中添加视图到片段

时间:2016-02-24 00:05:09

标签: android android-activity fragment

我在我的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()

时,它会返回null

//活动

public void onCreate()
{
 .
 .
 .
 CaafeFragment caafeFragment=new CaafeFragment();
 caafeRecyclerView = caafeFragment.getRecyclerView(); // here it returns null
}

2 个答案:

答案 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对象,

在getRecyclerView()

替换返回(RecyclerView)getView()。findViewById(R.id.caafeRecyclerView); 由:

public RecyclerView getRecyclerView() {
    return recyclerView;
}

这里肯定的是,recyclerView对象包含实例化的视图,并且可以跟踪此行以确保在onCreate()中

 recyclerView = (RecyclerView) view.findViewById(R.id.caafeRecyclerView);

是否有价值。