2016-06-15 84 views
1

onCreateViewHolder()onBindViewHolder(),onAttachedToRecyclerView()这样的函数永远不会被调用。这是我想要做的。Android,适配器中的函数永远不会被调用

  1. 交换机从MainActivityRecyclerViewActivity当点击Button1,和负载fragment_recyclerviewRecyclerViewActivity
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; 
    } 
  • FragmentViewActivity.onCreate()
  • FragmentViewActivity.onCreate() 
    { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_recyclerview); 
    
        getSupportFragmentManager().beginTransaction().replace(R.id.recyclerViewContainer, RecyclerViewFragment.newInstance()).commit(); 
    
        Log.d("AAA", "RecyclerViewActivity.onCreate()"); 
    } 
    
  • RecyclerViewFragment.onCreateView()
  • 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); 
    } 
    
  • Adapter.getItemCount()返回30,但是,功能在构造函数以外的其他构造函数永远不会被调用,这为我留下了一个纯粹的空白屏幕 。我不知道这是怎么回事
  • +1

    看看'onCreateView()'方法中的'return'语句。你没有返回你刚才设置的所有东西。 –

    回答

    0

    你设置你View起来rootView然后,而不是返回该View,返回super.onCreateView()

    而是在onCreateView()如下:

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

    您应该返回View您只需设置:

    return rootView; 
    
    +0

    OMG ...我熬夜想弄清楚什么是错......你是我的英雄!!!!! – Rangtian

    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说你需要返回充气视图不是超级创建的视图!!!!*

    然后ü将避免这样的问题

    第二:

    • 取决于片段/父组件的使用(例如当u实现与状态或正常视图寻呼机应该使用不同的方法适配器,或者你保留片段)有时你可以或有时不能持有参考膨胀的看法(因此返回或不是一旦创建视图) - 但我伤心这取决于你使用什么方法
    +0

    谢谢你的帮助。我错误地返回super.onCreateView()而不是像user13所述的rootView。现在问题解决了 – Rangtian

    相关问题