java - 2 个 TabItem 的用户列表
问题描述
我有List
一个Users
2 TabItem
。第一个TabItem
是MyUsers
,第二个是Favorites
。我使用foreach
循环对Users
. 现在,我想要的是显示Users
List
intoMyUsers
和在我的循环显示 sorted Users
into之后Favorites
。
用户片段.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);
}
解决方案
如果我理解你的问题是正确的。您将创建两个列表,一个是接收到的用户的无序列表,另一个是标记为收藏的用户列表。然后,您想RecyclerView
通过单击TabLayout
同一布局中的两个选项卡之一来切换要在片段布局中显示的单个列表。
您应该首先简单地填充列表,而不是一次将它们都设置到 RecyclerView 中,然后mTabLayout
使用可以addOnTabSelectedListener
在其中选择要设置到 recyclerview 中的列表来管理您的选项卡选择,因为您已经LayoutManager
为列表定义了一个,接下来最后在您的适配器上使用notifyDataSetChanged()
来更新视图。
因此,保持大部分逻辑相同,您的代码需要重构为如下所示:
...
@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();
}
希望这就是你要找的。
推荐阅读
- javascript - 无法使用javascript更改html页面的div类
- sql - 在数据库中的所有表中搜索字符串和数字
- apache-flink - Flink CEP 事件加入到一个反向数据流
- android - logcat循环错误,android studio newbee
- sql-server - 如果值返回为无穷大,则默认为 0 - SQL 报告
- url - 如何在 Typo3 9.5.0 上获取 News 7.0.7 的口语 URL
- hibernate - 无法加载表单标记处理程序
- java - 如何在我的表单 liferay 7 中插入 ScreenName?
- javascript - 每 x 秒从远程服务器重新加载图像而不重新加载整个页面
- java - 如何减小 jre 大小以与应用程序捆绑?