Ich versuche RecyclerView, die in einem Fragment ist zu verwenden. Dies ist Fragment ist innerhalb der ViewPager geschachtelt.OnCreateViewHolder wird nie
public class UniversityDetail extends Fragment {
RecyclerView universityDetailView;
//need to set Adapter
public static UniversityDetail newInstance(){
return new UniversityDetail();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.fragment_university_lsit,container,false);
universityDetailView = (RecyclerView)view;
setupViews();
return view;
}
private void setupViews(){
//set the adapter
UniversityDetailAdapter detailAdapter = new UniversityDetailAdapter(new ArrayList<UniversityDetails>());
universityDetailView.addItemDecoration(new RecyclerListDecorater(getActivity()));
universityDetailView.setAdapter(detailAdapter);
universityDetailView.setLayoutManager(new LinearLayoutManager(getActivity()));
universityDetailView.setHasFixedSize(false);
}
public RecyclerView getRecyclerView(){
return this.universityDetailView;
}
}
Dies ist das Fragment, das ich in der viewPager.It eine recyclerView von onCreateView sein will zurück.
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scroll"
android:paddingBottom="8dp"
android:paddingTop="?attr/actionBarSize"
android:scrollbars="vertical">
fragment_university_lsit.xml
recyclerView verwendet unter Adapter.
DetailHolder ist die Klasse erweitert ReyclerView.ViewHolder und seine Implementierung ist hier irrelevant.
Die Adapterliste wird von Handler und notifyDataSetChanged()
private void setup(){
mHandler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(Message message){
if(message.what == ConnectionHandler.DETAILMSG){
Log.d("detail handle message", "handleMessage: Called");
List<UniversityDetails> details = (List<UniversityDetails>)message.obj;
UniversityDetailAdapter adapter = (UniversityDetailAdapter)universityDetail.getRecyclerView().getAdapter();
adapter.addAll(details);
adapter.notifyDataSetChanged();
Log.d("size", "handleMessage: " + adapter.getItemCount());
}
}
};
}
Fragment wird in Aktivität erstellt ..
private void setupNavigation(){
ViewPagerAdapter pagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
universityDetail = UniversityDetail.newInstance();
pagerAdapter.addFragment(universityDetail);
mViewPager.setAdapter(pagerAdapter);
//setup the fragment transaction.
headerTab.setViewPager(mViewPager,0);
//no need to add to back stack
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.view_pager,universityDetail);
transaction.commit();
}
Implementierung von DetailHolder
public class DetailHolder extends RecyclerView.ViewHolder{
CardView admissionGeneral;
public View root;
public DetailHolder (View itemView){
super(itemView);
root = itemView;
admissionGeneral = (CardView)root.findViewById(R.id.admission_general);
}
public void bind(UniversityDetails detail){
Log.d("detail bind", "bind: binding to recyclerView");
}
}
hier das Protokoll upated von adapter.getItemCount(); zurück 3; Das bedeutet, dass etwas hinzugefügt wird und OnCreateViewHolder soll aufgerufen werden, ist es aber nie.
Die komische Sache ist, dass ich einen anderen recyclerAdapter eingeführt habe, ist das selbeProject und sein Arbeiten vollkommen in Ordnung.
Wenn es nie aufgerufen wird, dann machen Sie nie eine Instanz des Fragments. Wenn Sie denken, dass Sie sind, zeigen Sie bitte diesen Code. –
Ich habe es in Aktivität erstellt und aufgerufen, wenn die Aktivität erstellt wird. –
Also, Sie sagen, dass onCreateView nicht aufgerufen wird, noch können Sie den RecyclerView-Adapter bekommen und Daten hinzufügen ... Klingt wie es ist namens. Versuchen Sie, eine Log-Anweisung in dort –