0

gefüllt wurde Ich habe ein Fragment (sagen X), die ViewPager und TabLayout enthalten und ich übergebe ein Fragment (sagen Y) mit einer Liste) dreimal an Adapter dieses Viewpager aber jedes Mal ist die Liste nach einem Parameter sortiert.Wie sortiere ich Liste in RecyclerView, die durch ViewPager

Y-Fragment enthält RecyclerView. Und ich gebe diese Liste an den Adapter dieses RecyclerView weiter. Ich bin in der Lage, alle 3 Registerkarten mit fragment.But Liste innerhalb Recyclerview ist nicht sortiert.Nur die letzte Registerkarte mit recyclerview war kommend sortiert

Bitte helfen Sie mir, Mängel des Codes zu finden.

X Fragment

@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; 
} 

Das ist mein Adapter von 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-Fragment (AvailableRecyclerViewFragment.java)

@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; 
} 

Adapter für 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(); 
} 
} 

Antwort

0

Innenseite Fragment X (wo Ihre ViewPager ist) call Methode setOnPageChangeListener:

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) { 


     } 
    }); 

Wie Sie innerhalb von onPageSelected() sehen, rufen Sie notifyDataSetChanged für Ihren ViewPager-Adapter auf. Dann sollte es das Fragment sortieren, auf dem du stehst.

+0

war diese Antwort hilfreich? –

Verwandte Themen