Java 2个选项卡项的一个用户列表
我有一个Java 2个选项卡项的一个用户列表,java,android,android-tablayout,tabitem,Java,Android,Android Tablayout,Tabitem,我有一个用户列表,其中有2个选项卡项。第一个TabItem是MyUsers,第二个是Favorites。我使用foreach循环对用户进行排序。现在,我想要的是将用户列表显示到MyUsers中,并在我的循环之后将排序的用户显示到收藏夹中 UserFragment.java public class UserFragment extends Fragment implements MyUserRecyclerViewAdapter.OnItemListener { @BindView(R.id.
用户列表
,其中有2个选项卡项
。第一个TabItem
是MyUsers
,第二个是Favorites
。我使用foreach
循环对用户进行排序。现在,我想要的是将用户
列表
显示到MyUsers
中,并在我的循环之后将排序的用户
显示到收藏夹中
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);
}
公共类UserFragment扩展片段实现MyUserRecycleServiceAdapter.OnItemListener{
@BindView(R.id.tabs)
表格布局;
@BindView(R.id.tabItem)
TabItem-mTabItemMyUsers;
@BindView(R.id.tabItem2)
选项卡项mTabItemFavorites;
私有用户API服务mApiService;
私人博物馆名单;
私人名单;
私人回收视图mRecyclerView;
私人投资;
公共静态UserFragment newInstance(int位置){
UserFragment UserFragment=新的UserFragment();
Bundle args=新Bundle();
参数putInt(“位置”,位置);
userFragment.setArguments(args);
返回userFragment;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mApiService=DI.getUserApiService();
mPosition=getArguments().getInt(“位置”,0);
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u user\u list,container,false);
Context=view.getContext();
mRecyclerView=(RecyclerView)视图;
mRecyclerView.setLayoutManager(新的LinearLayoutManager(上下文));
添加装饰(新的DividerItemDecoration(getContext(),DividerItemDecoration.VERTICAL));
initList();
isUserFavorite();
返回视图;
}
public void isUserFavorite(){
mFavorites=新的ArrayList();
用于(用户:缪斯){
if(user.isFavorite()){
mFavorites.add(用户);
}
}
setAdapter(新的MyUserRecycleServiceAdapter(mFavorites,this));
}
私有void initList(){
mUser=mApiService.getUsers();
setAdapter(新的MyUserRecycleServiceAdapter(mUsers,this));
}
@凌驾
public void onStart(){
super.onStart();
EventBus.getDefault()寄存器(此);
}
@凌驾
公共void onStop(){
super.onStop();
EventBus.getDefault().unregister(此);
}
如果我没弄错你的问题。你将创建两个列表,一个是收到的无序用户列表,另一个是标记为收藏夹的用户列表。然后你想通过单击表格布局中的两个选项卡之一,在片段布局的单个回收视图中切换要显示的列表在相同的布局中
您应该首先填充列表,而不是将它们同时设置到RecyclerView中,然后使用AddOnAbselectedListener
管理mTabLayout
上的选项卡选择,在该列表中您可以选择要设置到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();
}
。。。
@凌驾
创建视图上的公共视图(La…){
...
mRecyclerView.setLayoutManager(新的LinearLayoutManager(上下文));
...
initList();
isUserFavorite();
初始化选择();
返回视图;
}
public void isUserFavorite(){
mFavorites=新的ArrayList();
用于(用户:缪斯){
if(user.isFavorite()){
mFavorites.add(用户);
}
}
}
私有void initList(){
mUser=mApiService.getUsers();
}
公共选择(){
mTabLayout.addOnTabSelectedListener(新的TabLayout.OnTabSelectedListener(){
@凌驾
已选择的公共选项卡(TabLayout.Tab){
//假设用户位于选项卡索引0,收藏夹位于选项卡索引1
如果(tab.getPosition()==1){
选择收藏夹();
}否则{
选择用户();
}
}
@凌驾
已选择的公共选项卡(TabLayout.Tab){
}
@凌驾
已重新选择公共选项卡(TabLayout.Tab){
}
});
//如果您希望在默认情况下选择0处的用户选项卡
Objects.requirennoull(mTabLayout.getTabAt(0)).select();
}
私有void selectFavorites(){
//无论您使用哪个适配器来显示收藏夹
MyUserRecycleServiceAdapter mFavAdapter=新的MyUserRecycleServiceAdapter(mFavorites,上下文);
mRecyclerView.setAdapter(mFavAdapter);
mFavAdapter.notifyDataSetChanged();
}
私有void selectUsers(){
//无论您使用哪个适配器来显示所有用户
MyNeighborRecyclServiceAdapter muserAdapter=新MyNeighborRecyclServiceAdapter(缪斯,上下文);
mRecyclerView.setAdapter(museradapter);
mFavAdapter.notifyDataSetChanged();
}
希望这正是您想要的。对于此类问题,通常要求您显示/列出您尝试过的内容,否则将归结为代码请求而不是问题。是的,您非常理解。非常感谢您的回答。我将在明天尝试。我将在明天给您发送一条消息,以便告诉您如果是工作的话。