How to update listview after deleting data in firebase?
up vote
0
down vote
favorite
This is my TimeTableActivity.java, which displays listview of items(individual's schedules)
package com.example.jongha.meetingorganizer;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.ListView;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.ArrayList;
import java.util.List;
public class TimeTableActivity extends AppCompatActivity {
private FloatingActionButton addScheduleBtn;
DatabaseReference dref;
ListView listview;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timetable);
//listview 연결, adapter 생성과 연결, dref연결
listview=(ListView)findViewById(R.id.schedule_list_view);
final ScheduleListViewAdapter adapter = new ScheduleListViewAdapter();
listview.setAdapter(adapter);
dref = FirebaseDatabase.getInstance().getReference("timetables/test1999");
//dref change to path of logged-in user하기
//realtime database 데이터 변화에 대한 반응
dref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
adapter.addItem(dataSnapshot.getValue(ScheduleDTO.class));
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
adapter.removeItem(dataSnapshot.getValue(ScheduleDTO.class));
adapter.notifyDataSetChanged();
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
//listview의 스케쥴 각각에 대한 onclicklistner
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ScheduleDTO item = (ScheduleDTO) parent.getItemAtPosition(position);
Intent intent = new Intent(TimeTableActivity.this, DisplayScheduleActivity.class);
String infoOfSchedule = new String {item.getActivityName(), item.getStartHour(), item.getStartMin(), item.getEndHour(), item.getEndMin(), item.getDayOfWeek()};
intent.putExtra("dataStrings", infoOfSchedule);
startActivity(intent);
}
});
//스케쥴 추가 버튼 onclicklistner
addScheduleBtn = findViewById(R.id.add_schedule_btn);
addScheduleBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
startActivity(new Intent(TimeTableActivity.this, NewScheduleActivity.class));
}
});
}
}
and this is my custom listview adapter, ScheduleListViewAdapter.java
package com.example.jongha.meetingorganizer;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class ScheduleListViewAdapter extends BaseAdapter {
private ArrayList<ScheduleDTO> listViewItemList = new ArrayList<ScheduleDTO>();
//ScheduleListViewAdapter 생성
public ScheduleListViewAdapter() {
}
@Override
public int getCount() {
return listViewItemList.size();
}
@Override
public Object getItem(int position) {
return listViewItemList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
final Context context = parent.getContext();
// "layout_schedule_listview.xml" Layout을 inflate하여 convertView 참조 획득.
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.layout_schedule_listview, parent, false);
}
// 화면에 표시될 View(Layout이 inflate된)으로부터 위젯에 대한 참조 획득
TextView titleTextView = (TextView) convertView.findViewById(R.id.scheduleListNameView) ;
TextView timeTextView = (TextView) convertView.findViewById(R.id.scheduleListTimeView) ;
// Data Set(listViewItemList)에서 position에 위치한 데이터 참조 획득
ScheduleDTO listViewItem = listViewItemList.get(position);
// 아이템 내 각 위젯에 데이터 반영
titleTextView.setText(listViewItem.getActivityName());
timeTextView.setText(listViewItem.getListViewTime());
return convertView;
}
public void addItem(ScheduleDTO gotItem) {
listViewItemList.add(gotItem);
}
public void removeItem(ScheduleDTO gotItem){
listViewItemList.remove(gotItem);
}
}
My problem is that though delete function being called in other activity is running correctly(deleting data in firebase console), and listview is well-updated after TimeTableActivity being called again after TimeTableActivity being finished, listview is not being updated properly right after deleting item.
In fact, i had a typo in TimetableActivity.java at first.
I typed
adapter.addItem(....) instead of adapter.removeItem(....) in onChlidRemoved method.
In this situation, listview was updated, containing two same item.
For example, if i had item A and it being deleted, listview was immediately updated and displaying two A.
However, after changing to adapter.removeItem(...), listview is not being updated immediately after deleting item.
How should i fix this problem??
android listview
add a comment |
up vote
0
down vote
favorite
This is my TimeTableActivity.java, which displays listview of items(individual's schedules)
package com.example.jongha.meetingorganizer;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.ListView;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.ArrayList;
import java.util.List;
public class TimeTableActivity extends AppCompatActivity {
private FloatingActionButton addScheduleBtn;
DatabaseReference dref;
ListView listview;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timetable);
//listview 연결, adapter 생성과 연결, dref연결
listview=(ListView)findViewById(R.id.schedule_list_view);
final ScheduleListViewAdapter adapter = new ScheduleListViewAdapter();
listview.setAdapter(adapter);
dref = FirebaseDatabase.getInstance().getReference("timetables/test1999");
//dref change to path of logged-in user하기
//realtime database 데이터 변화에 대한 반응
dref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
adapter.addItem(dataSnapshot.getValue(ScheduleDTO.class));
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
adapter.removeItem(dataSnapshot.getValue(ScheduleDTO.class));
adapter.notifyDataSetChanged();
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
//listview의 스케쥴 각각에 대한 onclicklistner
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ScheduleDTO item = (ScheduleDTO) parent.getItemAtPosition(position);
Intent intent = new Intent(TimeTableActivity.this, DisplayScheduleActivity.class);
String infoOfSchedule = new String {item.getActivityName(), item.getStartHour(), item.getStartMin(), item.getEndHour(), item.getEndMin(), item.getDayOfWeek()};
intent.putExtra("dataStrings", infoOfSchedule);
startActivity(intent);
}
});
//스케쥴 추가 버튼 onclicklistner
addScheduleBtn = findViewById(R.id.add_schedule_btn);
addScheduleBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
startActivity(new Intent(TimeTableActivity.this, NewScheduleActivity.class));
}
});
}
}
and this is my custom listview adapter, ScheduleListViewAdapter.java
package com.example.jongha.meetingorganizer;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class ScheduleListViewAdapter extends BaseAdapter {
private ArrayList<ScheduleDTO> listViewItemList = new ArrayList<ScheduleDTO>();
//ScheduleListViewAdapter 생성
public ScheduleListViewAdapter() {
}
@Override
public int getCount() {
return listViewItemList.size();
}
@Override
public Object getItem(int position) {
return listViewItemList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
final Context context = parent.getContext();
// "layout_schedule_listview.xml" Layout을 inflate하여 convertView 참조 획득.
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.layout_schedule_listview, parent, false);
}
// 화면에 표시될 View(Layout이 inflate된)으로부터 위젯에 대한 참조 획득
TextView titleTextView = (TextView) convertView.findViewById(R.id.scheduleListNameView) ;
TextView timeTextView = (TextView) convertView.findViewById(R.id.scheduleListTimeView) ;
// Data Set(listViewItemList)에서 position에 위치한 데이터 참조 획득
ScheduleDTO listViewItem = listViewItemList.get(position);
// 아이템 내 각 위젯에 데이터 반영
titleTextView.setText(listViewItem.getActivityName());
timeTextView.setText(listViewItem.getListViewTime());
return convertView;
}
public void addItem(ScheduleDTO gotItem) {
listViewItemList.add(gotItem);
}
public void removeItem(ScheduleDTO gotItem){
listViewItemList.remove(gotItem);
}
}
My problem is that though delete function being called in other activity is running correctly(deleting data in firebase console), and listview is well-updated after TimeTableActivity being called again after TimeTableActivity being finished, listview is not being updated properly right after deleting item.
In fact, i had a typo in TimetableActivity.java at first.
I typed
adapter.addItem(....) instead of adapter.removeItem(....) in onChlidRemoved method.
In this situation, listview was updated, containing two same item.
For example, if i had item A and it being deleted, listview was immediately updated and displaying two A.
However, after changing to adapter.removeItem(...), listview is not being updated immediately after deleting item.
How should i fix this problem??
android listview
I can't get your question. Can you write in other words?
– Шах
yesterday
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
This is my TimeTableActivity.java, which displays listview of items(individual's schedules)
package com.example.jongha.meetingorganizer;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.ListView;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.ArrayList;
import java.util.List;
public class TimeTableActivity extends AppCompatActivity {
private FloatingActionButton addScheduleBtn;
DatabaseReference dref;
ListView listview;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timetable);
//listview 연결, adapter 생성과 연결, dref연결
listview=(ListView)findViewById(R.id.schedule_list_view);
final ScheduleListViewAdapter adapter = new ScheduleListViewAdapter();
listview.setAdapter(adapter);
dref = FirebaseDatabase.getInstance().getReference("timetables/test1999");
//dref change to path of logged-in user하기
//realtime database 데이터 변화에 대한 반응
dref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
adapter.addItem(dataSnapshot.getValue(ScheduleDTO.class));
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
adapter.removeItem(dataSnapshot.getValue(ScheduleDTO.class));
adapter.notifyDataSetChanged();
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
//listview의 스케쥴 각각에 대한 onclicklistner
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ScheduleDTO item = (ScheduleDTO) parent.getItemAtPosition(position);
Intent intent = new Intent(TimeTableActivity.this, DisplayScheduleActivity.class);
String infoOfSchedule = new String {item.getActivityName(), item.getStartHour(), item.getStartMin(), item.getEndHour(), item.getEndMin(), item.getDayOfWeek()};
intent.putExtra("dataStrings", infoOfSchedule);
startActivity(intent);
}
});
//스케쥴 추가 버튼 onclicklistner
addScheduleBtn = findViewById(R.id.add_schedule_btn);
addScheduleBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
startActivity(new Intent(TimeTableActivity.this, NewScheduleActivity.class));
}
});
}
}
and this is my custom listview adapter, ScheduleListViewAdapter.java
package com.example.jongha.meetingorganizer;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class ScheduleListViewAdapter extends BaseAdapter {
private ArrayList<ScheduleDTO> listViewItemList = new ArrayList<ScheduleDTO>();
//ScheduleListViewAdapter 생성
public ScheduleListViewAdapter() {
}
@Override
public int getCount() {
return listViewItemList.size();
}
@Override
public Object getItem(int position) {
return listViewItemList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
final Context context = parent.getContext();
// "layout_schedule_listview.xml" Layout을 inflate하여 convertView 참조 획득.
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.layout_schedule_listview, parent, false);
}
// 화면에 표시될 View(Layout이 inflate된)으로부터 위젯에 대한 참조 획득
TextView titleTextView = (TextView) convertView.findViewById(R.id.scheduleListNameView) ;
TextView timeTextView = (TextView) convertView.findViewById(R.id.scheduleListTimeView) ;
// Data Set(listViewItemList)에서 position에 위치한 데이터 참조 획득
ScheduleDTO listViewItem = listViewItemList.get(position);
// 아이템 내 각 위젯에 데이터 반영
titleTextView.setText(listViewItem.getActivityName());
timeTextView.setText(listViewItem.getListViewTime());
return convertView;
}
public void addItem(ScheduleDTO gotItem) {
listViewItemList.add(gotItem);
}
public void removeItem(ScheduleDTO gotItem){
listViewItemList.remove(gotItem);
}
}
My problem is that though delete function being called in other activity is running correctly(deleting data in firebase console), and listview is well-updated after TimeTableActivity being called again after TimeTableActivity being finished, listview is not being updated properly right after deleting item.
In fact, i had a typo in TimetableActivity.java at first.
I typed
adapter.addItem(....) instead of adapter.removeItem(....) in onChlidRemoved method.
In this situation, listview was updated, containing two same item.
For example, if i had item A and it being deleted, listview was immediately updated and displaying two A.
However, after changing to adapter.removeItem(...), listview is not being updated immediately after deleting item.
How should i fix this problem??
android listview
This is my TimeTableActivity.java, which displays listview of items(individual's schedules)
package com.example.jongha.meetingorganizer;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.ListView;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.ArrayList;
import java.util.List;
public class TimeTableActivity extends AppCompatActivity {
private FloatingActionButton addScheduleBtn;
DatabaseReference dref;
ListView listview;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timetable);
//listview 연결, adapter 생성과 연결, dref연결
listview=(ListView)findViewById(R.id.schedule_list_view);
final ScheduleListViewAdapter adapter = new ScheduleListViewAdapter();
listview.setAdapter(adapter);
dref = FirebaseDatabase.getInstance().getReference("timetables/test1999");
//dref change to path of logged-in user하기
//realtime database 데이터 변화에 대한 반응
dref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
adapter.addItem(dataSnapshot.getValue(ScheduleDTO.class));
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
adapter.removeItem(dataSnapshot.getValue(ScheduleDTO.class));
adapter.notifyDataSetChanged();
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
//listview의 스케쥴 각각에 대한 onclicklistner
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ScheduleDTO item = (ScheduleDTO) parent.getItemAtPosition(position);
Intent intent = new Intent(TimeTableActivity.this, DisplayScheduleActivity.class);
String infoOfSchedule = new String {item.getActivityName(), item.getStartHour(), item.getStartMin(), item.getEndHour(), item.getEndMin(), item.getDayOfWeek()};
intent.putExtra("dataStrings", infoOfSchedule);
startActivity(intent);
}
});
//스케쥴 추가 버튼 onclicklistner
addScheduleBtn = findViewById(R.id.add_schedule_btn);
addScheduleBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
startActivity(new Intent(TimeTableActivity.this, NewScheduleActivity.class));
}
});
}
}
and this is my custom listview adapter, ScheduleListViewAdapter.java
package com.example.jongha.meetingorganizer;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class ScheduleListViewAdapter extends BaseAdapter {
private ArrayList<ScheduleDTO> listViewItemList = new ArrayList<ScheduleDTO>();
//ScheduleListViewAdapter 생성
public ScheduleListViewAdapter() {
}
@Override
public int getCount() {
return listViewItemList.size();
}
@Override
public Object getItem(int position) {
return listViewItemList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
final Context context = parent.getContext();
// "layout_schedule_listview.xml" Layout을 inflate하여 convertView 참조 획득.
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.layout_schedule_listview, parent, false);
}
// 화면에 표시될 View(Layout이 inflate된)으로부터 위젯에 대한 참조 획득
TextView titleTextView = (TextView) convertView.findViewById(R.id.scheduleListNameView) ;
TextView timeTextView = (TextView) convertView.findViewById(R.id.scheduleListTimeView) ;
// Data Set(listViewItemList)에서 position에 위치한 데이터 참조 획득
ScheduleDTO listViewItem = listViewItemList.get(position);
// 아이템 내 각 위젯에 데이터 반영
titleTextView.setText(listViewItem.getActivityName());
timeTextView.setText(listViewItem.getListViewTime());
return convertView;
}
public void addItem(ScheduleDTO gotItem) {
listViewItemList.add(gotItem);
}
public void removeItem(ScheduleDTO gotItem){
listViewItemList.remove(gotItem);
}
}
My problem is that though delete function being called in other activity is running correctly(deleting data in firebase console), and listview is well-updated after TimeTableActivity being called again after TimeTableActivity being finished, listview is not being updated properly right after deleting item.
In fact, i had a typo in TimetableActivity.java at first.
I typed
adapter.addItem(....) instead of adapter.removeItem(....) in onChlidRemoved method.
In this situation, listview was updated, containing two same item.
For example, if i had item A and it being deleted, listview was immediately updated and displaying two A.
However, after changing to adapter.removeItem(...), listview is not being updated immediately after deleting item.
How should i fix this problem??
android listview
android listview
edited yesterday
shashank chandak
15611
15611
asked yesterday
PAKALGUKSU
1
1
I can't get your question. Can you write in other words?
– Шах
yesterday
add a comment |
I can't get your question. Can you write in other words?
– Шах
yesterday
I can't get your question. Can you write in other words?
– Шах
yesterday
I can't get your question. Can you write in other words?
– Шах
yesterday
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53238085%2fhow-to-update-listview-after-deleting-data-in-firebase%23new-answer', 'question_page');
}
);
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
I can't get your question. Can you write in other words?
– Шах
yesterday