Один список пользователей для 2 TabItem - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть List из Users с 2 TabItem. Первый TabItem равен MyUsers, а второй - Favorites. Я использую foreach l oop для сортировки Users. Теперь, что я хочу, это отобразить Users List в MyUsers, а после моего l oop отобразить отсортированный Users в Favorites.

UserFragment. java

public class UserFragment extends Fragment implements MyUserRecyclerViewAdapter.OnItemListener {

@BindView(R.id.tabs)
TabLayout mTabLayout;
@BindView(R.id.tabItem)
TabItem mTabItemMyUsers;
@BindView(R.id.tabItem2)
TabItem mTabItemFavorites;

private UserApiService mApiService;
private List<User> mUsers;
private List<User> mFavorites;
private RecyclerView mRecyclerView;

private int mPosition;

public static UserFragment newInstance(int position) {
    UserFragment userFragment = new UserFragment();

    Bundle args = new Bundle();
    args.putInt("position", position);
    userFragment.setArguments(args);

    return userFragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mApiService = DI.getUserApiService();

    mPosition = getArguments().getInt("position", 0);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_user_list, container, false);
    Context context = view.getContext();
    mRecyclerView = (RecyclerView) view;
    mRecyclerView.setLayoutManager(new LinearLayoutManager(context));
    mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));

    initList();
    isUserFavorite();
    return view;
}


public void isUserFavorite() {
    mFavorites = new ArrayList<>();

    for (User user : mUsers) {
        if (user.isFavorite()) {
            mFavorites.add(user);
        }
    }
    mRecyclerView.setAdapter(new MyUserRecyclerViewAdapter(mFavorites, this));

}

private void initList() {
    mUser = mApiService.getUsers();
    mRecyclerView.setAdapter(new MyUserRecyclerViewAdapter(mUsers, this));

}

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    super.onStop();
    EventBus.getDefault().unregister(this);
}

1 Ответ

0 голосов
/ 03 февраля 2020

Если я правильно понял ваш вопрос. Вы будете создавать два списка, один неупорядоченный список пользователей в том виде, в котором они были получены, а второй - список пользователей, помеченных как избранные. И затем вы хотите переключить список, который будет отображаться в одиночном RecyclerView в макете вашего фрагмента, нажав на одну из двух вкладок в вашем TabLayout в том же макете.

Вы должны просто заполнить списки сначала вместо одновременной установки их обоих в RecyclerView, затем управляйте выбором вкладок на вашем mTabLayout, используя addOnTabSelectedListener, внутри которого вы можете выбрать список для установки в своем обзоре переработчика, поскольку вы уже определили LayoutManager для своего списка затем, наконец, используйте notifyDataSetChanged() на вашем адаптере для обновления представлений.

Таким образом, сохраняя большинство ваших логи c такими же, ваш код должен быть подвергнут рефакторингу примерно так:

...
@Override
public View onCreateView(La...) {
...
    mRecyclerView.setLayoutManager(new LinearLayoutManager(context));
...
    initList();
    isUserFavorite();
    initSelection();
    return view;
}

public void isUserFavorite() {
    mFavorites = new ArrayList<>();
    for (User user : mUsers) {
        if (user.isFavorite()) {
            mFavorites.add(user);
        }
    }    
}

private void initList() {
    mUser = mApiService.getUsers();    
}


public void initSelection() {
  mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        // assuming users is at tab index 0 and favorites is at tab Index 1
        if(tab.getPosition() == 1) {
            selectFavorites();
        } else {
            selectUsers();
        }
    }
    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
    }
    @Override
    public void onTabReselected(TabLayout.Tab tab) {
    }
  });
  // if you wish to select the users tab at 0 by default
  Objects.requireNonNull(mTabLayout.getTabAt(0)).select();
}

private void selectFavorites() {
    // whichever adapter you were using to show favorites
    MyUserRecyclerViewAdapter mFavAdapter = new MyUserRecyclerViewAdapter(mFavorites, context);
    mRecyclerView.setAdapter(mFavAdapter);
    mFavAdapter.notifyDataSetChanged();
}

private void selectUsers() {
    // whichever adapter you were using to show all users
    MyNeighbourRecyclerViewAdapter mUsersAdapter = new MyNeighbourRecyclerViewAdapter(mUsers, context);
    mRecyclerView.setAdapter(mUsersAdapter);
    mFavAdapter.notifyDataSetChanged();
}

Надеюсь, это было то, что вы искали.

...