firebaseデータベース に基づいてリアルタイムのチャットアプリケーションを構築しているので、アプリケーションがoncreatメソッドを呼び出すたびに、私はdisplaychatmessages()メソッドですべてのメッセージ私のDBのどこにリストビューに表示されます。 データベースが大きくなったときにアプリがいくつかの問題に直面することができ、私の質問は?いくつかのmonthesまたは年後??私はそれが私がとlocalY古いメッセージを保存し、後でそれらをロードしようとしていると、アプリが唯一の新しい追加チャイルズをロードするソリューションとして、開始時刻にAndroid - リアルタイムチャットアプリケーションFirebaseを使用
のデータの多くをヘンデルなることを意味ですか?いくつかのいずれかが私を助けることができるが、私はそれは良いアイデアだ場合は、これを起動する方法を知りませんか?
私の古いdisplayChatMessagesメソッド: 新しいものについてのアイデア??
private void displayChatMessages() {
RecyclerView recycler = (RecyclerView)findViewById(R.id.myRv);
LinearLayoutManager layoutmang = new LinearLayoutManager(this);
layoutmang.setStackFromEnd(true);
recycler.setLayoutManager(layoutmang);
mAdapter = new FirebaseRecyclerAdapter<ChatMessage, RecyclerView.ViewHolder>(
ChatMessage.class, R.layout.activity_main, RecyclerView.ViewHolder.class, FirebaseDatabase.getInstance().getReference()) {
@Override
protected void populateViewHolder(final RecyclerView.ViewHolder viewHolder, final ChatMessage user,
final int position) {
int y=0;
ChatMessage user2;
if (position>1){
user2 = getItem(position - 1);
}else{
user2 = getItem(position);
}
ChatMessage ori2 = getItem(position);
if (user.getMessageUser().matches(FirebaseAuth.getInstance().getCurrentUser().getEmail())) {
if (user2.getMessageFULL()<ori2.getMessageFULL()){
y=1;
populateType1((HolderMe) viewHolder, user, 1);
}else{
populateType1((HolderMe) viewHolder, user, 0);
}
}else if (!user.getMessageUser().matches(FirebaseAuth.getInstance().getCurrentUser().getEmail())){
if (user2.getMessageFULL()<ori2.getMessageFULL()){
populateType2((HolderYou) viewHolder, user, 1,FirebaseAuth.getInstance().getCurrentUser().getEmail());
}else{
populateType2((HolderYou) viewHolder, user, 0,FirebaseAuth.getInstance().getCurrentUser().getEmail());
}
}
if(user.getMessageTime()< new Date().getTime()) {
HolderDate vh3 = (HolderDate) viewHolder;
populateType3(vh3, user, position);
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.e("ViewT",viewType+"");
if (viewType == 1) {
View userType1 = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_holder_me, parent, false);
return new HolderMe(userType1);
} else{
View userType2 = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_holder_you, parent, false);
return new HolderYou(userType2);
}
}
@Override
public int getItemViewType(int position) {
ChatMessage user = getItem(position);
String s = FirebaseAuth.getInstance().getCurrentUser().getEmail();
if (s.equals(user.getMessageUser())) {
return 1;
} else {
return 2;
}
}
private void populateType1(HolderMe v, ChatMessage model, int position) {
v.getTimeView().setText(DateFormat.format("HH:mm",model.getMessageTime()));
if (position==1) {
v.getFullDateView().setText(DateFormat.format("dd-MM-yyyy", model.getMessageTime()));
v.getFullDateView().setVisibility(View.VISIBLE);
}
v.getTextv().setText(model.getMessageText());
}
private void populateType3(HolderDate vcv, ChatMessage model, int position) {
vcv.getDate().setText(DateFormat.format("dd-MM-yyyy",model.getMessageTime()));
}
private void toaa1(String text) {
Toast.makeText(ChatActivity.this,text,Toast.LENGTH_LONG).show();
}
private void populateType2(HolderYou vv, ChatMessage model, int position,String username) {
vv.getTimeView().setText(DateFormat.format("HH:mm",model.getMessageTime()));
if (position==1) {
vv.getFullDateView().setVisibility(View.VISIBLE);
vv.getFullDateView().setText(DateFormat.format("dd-MM-yyyy", model.getMessageTime()));
}
vv.getTextv().setText(model.getMessageText());
if (username.matches("[email protected]")) {
vv.getImageView().setBackgroundResource(R.drawable.userm);
} else {
vv.getImageView().setBackgroundResource(R.drawable.usera);
}
}
};
recycler.setAdapter(mAdapter);
}
おかげで、それは私がeverday新しい子が追加ソリューションを作成していると、すべてのメッセージがそこに行くと毎回、ユーザうも働くたくさんのloaadに私はより多くの負荷をクリックするたびに増加したときにアプリが一日-iのメッセージをロードする複数のメッセージをタップ!最高のソリューションはどうですか? –