0

ViewPagerとTabLayoutを含むフラグメント(たとえばX)を持っています。このビューページのアダプタにフラグメント(たとえばY)を3回渡しています)しかし、毎回リストは何らかのパラメータでソートされます。RecyclerViewでリストをソートする方法

YフラグメントにはRecyclerViewが含まれています。そして私はこのリストをこのRecyclerViewのアダプターに渡しています。 私は3つのタブにfragmentを設定することができました。しかし、recyclerview内のリストはソートされていません。recyclerviewの最後のタブはソートされました

コードの欠点を見つけるのを手伝ってください。

Xフラグメント

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    rootView = getLayoutInflater(savedInstanceState).inflate(R.layout.available_bus_fragment, null); 
    tabLayout = (TabLayout) rootView.findViewById(R.id.tabs); 
    viewPager = (ViewPager) rootView.findViewById(R.id.viewpager); 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); 
    List<Bus> departureTimeList = mBusList; 
    Collections.sort(departureTimeList, new Comparator<Bus>() { 
     @Override 
     public int compare(Bus lhs, Bus rhs) { 
      return lhs.getDepartureTime().compareTo(rhs.getDepartureTime()); 
     } 
    }); 
    Fragment departureFragment = new AvailableRecyclerViewFragment(departureTimeList); 
    if (getArguments()!= null) { 
     departureFragment.setArguments(getArguments()); 
    } 
    adapter.addFragment(departureFragment, "Departure"); 

    List<Bus> durationTimeList = mBusList; 
    Collections.sort(durationTimeList, new Comparator<Bus>() { 
     @Override 
     public int compare(Bus lhs, Bus rhs) { 
      return lhs.getDurationForSorting() - rhs.getDurationForSorting(); 
     } 
    }); 
    Fragment durationFragment = new AvailableRecyclerViewFragment(durationTimeList); 
    if (getArguments() != null) { 
     durationFragment.setArguments(getArguments()); 
    } 
    adapter.addFragment(durationFragment, "Duration"); 
    List<Bus> priceList = mBusList; 
    Collections.sort(priceList, new Comparator<Bus>() { 
     @Override 
     public int compare(Bus lhs, Bus rhs) { 
      return lhs.getFares() - rhs.getFares(); 
     } 
    }); 
    Fragment priceFragment = new AvailableRecyclerViewFragment(priceList); 
    if (getArguments()!= null) { 
     priceFragment.setArguments(getArguments()); 
    } 
    adapter.addFragment(priceFragment, "Fare"); 
    viewPager.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 


    tabLayout.setupWithViewPager(viewPager); 

    return rootView; 
} 

これはviewpagerの私のアダプタです。

public class ViewPagerAdapter extends FragmentStatePagerAdapter { 
private final List<Fragment> mFragments = new ArrayList(); 
private final List<String> mFragmentTitles = new ArrayList(); 

public ViewPagerAdapter(FragmentManager manager) { 
    super(manager); 
} 

public void addFragment(Fragment fragment, String title) { 
    mFragments.add(fragment); 
    mFragmentTitles.add(title); 
} 


@Override 
public Fragment getItem(int position) { 
    return mFragments.get(position); 
} 

@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

@Override 
public int getCount() { 
    return mFragments.size(); 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    return mFragmentTitles.get(position); 
} 
} 

Y断片(AvailableRecyclerViewFragment.java)(あなたViewPagerである)断片X呼び出しメソッドsetOnPageChangeListenerの内部Recyclerview

public class CustomRecyclerViewAdapter extends RecyclerView.Adapter<CustomRecyclerViewAdapter.CustomViewHolder> { 
private List<Bus> dataList; 
Context mContext; 

public CustomRecyclerViewAdapter(Context context, List<Bus> list) { 
    dataList = list; 
    mContext = context; 
} 

public class CustomViewHolder extends RecyclerView.ViewHolder { 
    public TextView tv_departureTime; 
    public TextView tv_arrivalTime; 
    public TextView tv_duration; 
    public TextView tv_price; 
    public TextView tv_availableSeats; 
    public TextView tv_travels; 
    public TextView tv_busType; 

    public CustomViewHolder(View view) { 
     super(view); 
     tv_departureTime = (TextView) view.findViewById(R.id.tv_departureTime); 
     tv_arrivalTime = (TextView) view.findViewById(R.id.tv_arrivalTime); 
     tv_duration = (TextView) view.findViewById(R.id.tv_duration); 
     tv_price = (TextView) view.findViewById(R.id.tv_price); 
     tv_availableSeats = (TextView) view.findViewById(R.id.tv_availableSeats); 
     tv_travels = (TextView) view.findViewById(R.id.tv_travels); 
     tv_busType = (TextView) view.findViewById(R.id.tv_busType); 
    } 
} 

@Override 
public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.custom_list_row, parent, false); 
    final Animation anim = AnimationUtils.loadAnimation(mContext, android.R.anim.slide_in_left); 
    itemView.setAnimation(anim); 
    return new CustomViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(CustomViewHolder holder, int position) { 

    Bus bus = dataList.get(position); 
    holder.tv_arrivalTime.setText("" + bus.getArrivalTime()); 

    String[] data = bus.getDuration().split(":"); 

    holder.tv_departureTime.setText("" + bus.getDepartureTime()); 
    holder.tv_duration.setText("" + data[0] + "hr " + data[1] + "min"); 
    if (bus.getFareList() != null) { 
     String fare = ""; 
     for (FareDetails tempFare : bus.getFareList()) { 
      fare = fare + tempFare.getTotalFare() + ("/"); 
     } 
     holder.tv_price.setText("" + fare.substring(0, fare.length() - 1).toString()); 
    } else { 
     holder.tv_price.setText("" + bus.getFares()); 
    } 
    holder.tv_availableSeats.setText("" + bus.getAvailableSeats() + " seats"); 
    holder.tv_travels.setText(bus.getTravels()); 
    holder.tv_busType.setText(bus.getBusType()); 
} 


@Override 
public int getItemCount() { 
    return dataList.size(); 
} 
} 

答えて

0

ため

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    rootView = getLayoutInflater(savedInstanceState).inflate(R.layout.available_list_fragment, null); 

    recycler_view = (RecyclerView) rootView.findViewById(R.id.recycler_view); 

    adapter = new CustomRecyclerViewAdapter(getActivity(), mBusList); 
    adapter.notifyDataSetChanged(); 
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); 
    recycler_view.setLayoutManager(mLayoutManager); 
    recycler_view.setItemAnimator(new DefaultItemAnimator()); 
    recycler_view.setHasFixedSize(true); 
    recycler_view.setAdapter(adapter); 
    return rootView; 
} 

アダプタ:

viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 


     } 

     @Override 
     public void onPageSelected(int position) { 

      viewPagerAdapter.notifyDataSetChanged(); 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 


     } 
    }); 

onPageSelected()の内部にあるように、あなたのビューページアダプターのnotifyDataSetChangedを呼び出します。次に、あなたがいるフラグメントをソートする必要があります。

+0

この回答は役に立ちましたか? –

関連する問題