所以我有这样的问题
public class TabAdapter extends FragmentPagerAdapter {
private Context mContext;
public TabAdapter(Context context, FragmentManager fragmentManager) {
super(fragmentManager);
mContext = context;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new CameraTabFragment();
case 1:
return new ChatTabFragment();
case 2:
return new StatusTabFragment();
default:
return new CallsTabFragment();
}
}
@Override
public int getCount() {
return 4;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
if (position == 0) {
return null;
} else if (position == 1) {
return "Chats";
} else if (position == 2) {
return "Status";
} else {
return "Calls";
}
}}
public class ChatTabFragment extends Fragment {
private RecyclerView mRecyclerView;
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mConversationReference;
private DatabaseReference mChatReference;
private DatabaseReference mUserReference;
private FirebaseAuth mAuth;
private FirebaseUser mFirebaseUser;
private ChatListAdapter mAdapter;
private String personId;
private String key;
private List<User> userList = new ArrayList<>();
private List<Chat> chatList = new ArrayList<>();
private List<Conversation> conversationList = new ArrayList<>();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_chat_tab, container, false);
mRecyclerView = rootView.findViewById(R.id.recyvlerview_chat_tab);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mFirebaseDatabase = FirebaseDatabase.getInstance();
mAuth = FirebaseAuth.getInstance();
mFirebaseUser = mAuth.getCurrentUser();
mChatReference = mFirebaseDatabase.getReference().child("chats");
mConversationReference = mFirebaseDatabase.getReference().child("conversation").child(mFirebaseUser.getUid());
mUserReference = mFirebaseDatabase.getReference().child("users");
mConversationReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Conversation conversation = snapshot.getValue(Conversation.class);
conversationList.add(conversation);
key = snapshot.getKey();
personId = snapshot.child("chatWithId").getValue(String.class);
Query query = mUserReference.orderByKey().equalTo(personId);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
User user = snapshot.getValue(User.class);
userList.add(user);
}
mAdapter = new ChatListAdapter(getActivity(), userList);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return rootView;
}
这是我的RecycerView适配器:
public class ChatListAdapter extends RecyclerView.Adapter<ChatListAdapter.MyViewHolder> {
private FirebaseAuth mAuth;
private FirebaseUser mFirebaseUser;
private List<Conversation> conversationList;
private List<User> userList;
private Context mContext;
public ChatListAdapter(Context context, List<User> users) {
this.mContext = context;
this.userList = users;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_chats, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {
User user = userList.get(position);
holder.username.setText(user.getUsername());
Glide.with(mContext)
.load(user.getPhotoUrl())
.into(holder.avatar);
holder.layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
User user1 = userList.get(position);
Intent intent = new Intent(mContext, ChatRoomActivity.class);
intent.putExtra("userUid", user1.getUid());
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return userList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView username;
private TextView message;
private CircleImageView avatar;
private RelativeLayout layout;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
username = itemView.findViewById(R.id.tv_username);
message = itemView.findViewById(R.id.tv_message);
avatar = itemView.findViewById(R.id.avatar_user);
layout = itemView.findViewById(R.id.layout_user_chat);
}
}}
我怎么才能修好这个?谢了。
问题的解决方案是在ChattabFragment
的onCreateView方法中添加userlist.clear()
。
前。
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_chat_tab, container, false);
mRecyclerView = rootView.findViewById(R.id.recyvlerview_chat_tab);
userList.clear();
//Other code as it is...
问题内容: 我有一个常规的Twitter Bootstrap 3标签。我要做的就是控制 一个元素来控制多个容器。 在此示例中,当我更改标签时,仅第一个被更改。我要两个容器都改变,而不仅仅是第一个。 谢谢! 问题答案: 我将 data-target 属性添加到a元素并更改第二个tab内容中的id 我修改了这行 您的: 我的更新: 第二个选项卡内容,您的: 我的更新:
我想使用带有选项卡的ViewPager。然而,我需要在寻呼机上方放置一个文本视图(以及选项卡),如下所示: 看起来对于选项卡小部件,我们可以使用PagerTitleStrip或PagerTabStrip内联一个选项卡小部件: 但是,PagerTitleStrip和PagerTabStrip小部件的风格与只使用ActionBar选项卡时不同。我希望选项卡看起来像它们,具有均匀间隔的选项卡大小。 是否
在我的应用程序中,我有5个片段。我使用底部导航来管理它们。但在第一个片段中,我有回收器视图,当我单击回收器项目时,我需要在此选项卡(第一个选项卡)中打开第二个片段。 现在,当我试图打开第二个片段时,他打开了所有标签上方。 这就是我如何打开第二个碎片
确切错误消息:线程“main”java中出现异常。lang.IndexOutOfBoundsException:索引:1,大小:1(java)。util。ArrayList。rangeCheck(ArrayList.java:653) 代码段:
我有两个活动,一个使用导航图,另一个不使用。如何从不使用导航控制器的活动导航到导航图中的片段? 我试图从ImportMonsterActivity(在将新实体添加到db之后)导航到MainActivity导航图中的EditMonsterFragment。 我想我应该能够创建一个正常的意图,并给它一些额外的东西来指定导航图中的位置,但是我没有找到这种导航的任何留档。一切要么使用另一个应用程序的深层链