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();
}

希望这正是您想要的。

对于此类问题,通常要求您显示/列出您尝试过的内容,否则将归结为代码请求而不是问题。是的,您非常理解。非常感谢您的回答。我将在明天尝试。我将在明天给您发送一条消息,以便告诉您如果是工作的话。