fragment内にあるrecyclerViewを使用しようとしています。これはviewPager内にネストされたフラグメントです。onCreateViewHolderは決して呼び出されません
これは、私がviewPagerの中にいたいフラグメントです。これは、onCreateViewからrecyclerViewを返します。
<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は、アダプタの下に使用しています。
public class UniversityDetailAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<UniversityDetails> universityDetails;
private static Map<String,String> admissionRecommendation;
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
((DetailHolder)holder).bind(universityDetails.get(position));
}
@Override
public int getItemCount() {
return universityDetails.size();
}
public UniversityDetailAdapter(List<UniversityDetails> details){
this.universityDetails = details;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType){
Log.d("CreateUniveristyDetail", "onCreateViewHolder: detail called");
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.detail_fragment,parent,false);
return new DetailHolder(itemView);
}
}
DetailHolderは、ReyclerView.ViewHolderを拡張するクラスであり、その実装はここでは無関係です。
アダプタリストはハンドラとnotifyDataSetChanged(からupatedれる)
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());
}
}
};
}
断片が活動中に作成された...ここで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");
}
}
の
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();
}
は、実装のログadapter.getItemCount(); 3を返します。 thatsは何かが追加されていることを意味し、onCreateViewHolderは呼び出されるはずですが、それは決してありません。
私は別のrecyclerAdapterを実装していますが、同じプロジェクトであり、その動作は完全です。
これは決して呼び出されない場合、フラグメントのインスタンスを決して作成しません。あなたがそうだと思うなら、そのコードを示してください。 –
アクティビティを作成しアクティビティが作成されたときに呼び出されました。 –
したがって、onCreateViewは呼び出されていませんが、RecyclerViewアダプタを取得してデータを追加できます。と呼ばれる。そこにLogステートメントを追加してみてください。 –