Android, функции в адаптере никогда не вызывают
Функции как onCreateViewHolder()
, onBindViewHolder()
, onAttachedToRecyclerView()
никогда не звонят. Это то, что я пытаюсь сделать.
- Переключиться с
MainActivity
вRecyclerViewActivity
когдаButton1
нажать и загрузитьfragment_recyclerview
вRecyclerViewActivity
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, однако, функции в адаптере, отличном от конструктора, никогда не вызываются, что оставляет мне чистый пустой экран. Я понятия не имею, что происходит
2 ответа
Решение
Вы устанавливаете свой View
сведущий rootView
а потом вместо того, чтобы вернуть View
, Вы возвращаетесь super.onCreateView()
:
Вместо следующего в onCreateView()
:
return super.onCreateView(inflater, container, savedInstanceState);
Вы должны вернуть View
Вы только что настроили:
return rootView;
первый:
- не выполняйте инициализацию адаптера в 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, вам нужно вернуть завышенный вид, а не супер созданный вид!!!!*
тогда вы избежите таких проблем
второй:
- в зависимости от использования фрагмента / родительского компонента (например, вы должны использовать другой подход, когда реализуете пейджер представления с помощью адаптера состояния или обычного адаптера или сохраняете фрагмент), иногда вы можете, а иногда и не можете удерживать ссылку на завышенное представление (таким образом, возвращать или нет один раз созданный вид) - но, к сожалению, это зависит от того, какой подход вы используете