Android,适配器中的函数永远不会被调用

时间:2016-06-15 03:23:24

标签: android xml android-recyclerview

onCreateViewHolder()onBindViewHolder()onAttachedToRecyclerView()等函数永远不会被调用。这就是我想要做的。

  
      
  1. 点击MainActivity时从RecyclerViewActivity切换到Button1,然后将fragment_recyclerview加载到RecyclerViewActivity
  2.   
    switch(id) {
        case R.id.aboutMeButton:
            getSupportFragmentManager().beginTransaction().replace(R.id.mainContainer, AboutMeFragment.newInstance()).addToBackStack(null).commit();
            break;
        case R.id.task1Button:
            intent = new Intent(this, RecyclerViewActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT );
            startActivity(intent);
            break;
        default:
            break;
    }
  
      
  1. FragmentViewActivity.onCreate()
  2.   
FragmentViewActivity.onCreate()
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recyclerview);

    getSupportFragmentManager().beginTransaction().replace(R.id.recyclerViewContainer, RecyclerViewFragment.newInstance()).commit();

    Log.d("AAA", "RecyclerViewActivity.onCreate( )");
}
  
      
  1. RecyclerViewFragment.onCreateView()
  2.   
RecyclerViewFragment.onCreateView(){
    final View rootView = inflater.inflate(R.layout.fragment_recyclerview, container, false);
    movieData = new MovieData();

    mRecyclerView = (RecyclerView) rootView.findViewById(R.id.cardViewContainer);

    // Log.d("AAA", "mRecyclerView  = " + mRecyclerView.getId());

    // use this setting to improve performance if you know that changes
    // in content do not change the layout size of the RecyclerView
    mRecyclerView.setHasFixedSize(true);

    // use a linear layout manager
    mLayoutManager = new LinearLayoutManager(getActivity());
    mRecyclerView.setLayoutManager(mLayoutManager);

    Log.d("AAA", "getActivity() = " + getActivity().toString());
    Log.d("AAA", "movieList size  = " + movieData.getMoviesList().size());

    // specify an adapter (see also next example)
    mAdapter = new MovieDataAdapter(getActivity(), movieData.getMoviesList());
    mRecyclerView.setAdapter(mAdapter);

    return super.onCreateView(inflater, container, savedInstanceState);
}
  
      
  1. Adapter.getItemCount()返回30但是,除了构造函数之外的适配器中的函数永远不会被调用,这留给我一个纯粹的空白   屏幕。我不知道发生了什么事
  2.   

2 个答案:

答案 0 :(得分:0)

您要在View中设置rootView,然后返回View,而不是返回super.onCreateView()

而不是onCreateView()中的以下内容:

return super.onCreateView(inflater, container, savedInstanceState);

您应该返回刚刚设置的View

return rootView;

答案 1 :(得分:0)

<强>第一

  • 不要在 Fragment.onCreateView(,,,)中对适配器进行任何初始化 如名称所示,此方法应用于膨胀或创建视图:

如此夸大观点:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.recycler_layout, container, false);
}

创建视图后,使用 onViewCreated(..)方法初始化并创建适配器:

@Override
public void onViewCreated(View view, Bundle savedInstanceState){
    // here initialize recycler view 
    super.onViewCreated(view, savedInstanceState);
}

并且正如user13所说,你需要返回膨胀的视图而不是超级创建的视图!!!! *

然后你会避免这样的问题

<强>第二

  • 取决于片段/父组件的使用(例如,当您使用状态或普通适配器实现视图寻呼机时,您应该使用不同的方法,或者您保留片段)有时您可以或有时不能保持对膨胀视图的引用(因此,一旦创建了视图,就会返回 - 但是,我很难过,这取决于你使用什么方法