Ich habe zwei Aktivitäten: AddUser
und ToDo
. ToDo
implementiert eine Klasse mit Callback. ToDo
ermöglicht es dem Benutzer, eine Aufgabenliste zu erstellen, und die Aufgaben werden sofort in einer recyclerView angezeigt. Der Benutzer kann Elemente in ToDo
hinzufügen, aktualisieren oder löschen.Android - Übergeben Sie eine Absicht von einer Aktivität an eine andere, die eine Callback-Klasse mit Firebase implementiert
AddUser.java
public class AddUser extends AppCompatActivity implements View.OnClickListener{
private DatabaseReference mUserRef;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_user);
mUserRef = FirebaseDatabase.getInstance().getReference().child("users");
EditText etUserid = (EditText) findViewById(R.id.etUserid);
EditText etUsername = (EditText) findViewById(R.id.etUsername);
Button btnNext = (Button) findViewById(R.id.btnNext);
btnNext.setOnClickListener(this);
}
public void addUser(UserDetails userDetails){
userPushKey = mUserRef.push().getKey();
mUserRef.child(userPushKey).setValue(userDetails);
}
@Override
public void onClick(View v){
if(v == btnNext){
String inputUserid = etUserid.getText().toString();
String inputUsername = etUsername.getText().toString();
addUser(new UserDetails(inputUserid, inputUsername));
Intent intent = new Intent(AddUser.this,ToDo.class);
intent.putExtra("userKeyRef", userPushKey);
startActivity(intent);
}
}
}
ToDo.java
public class ToDo extends AppCompatActivity implements UserTodoAdapter.Callback {
private UserTodoAdapter mAdapter;
@Override
protcted void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_todo);
mAdapter = new UserTodoAdapter(this);
RecyclerView view = (RecyclerView) findViewById(R.id.recycler_view);
view.setHasFixedSize(true);
view.setAdapter(mAdapter);
}
@Override
public void onEdit(final UserTodo userTodo){
// some functions here
}
}
UserTodoAdapter.java
public class UserTodoAdapter extends RecyclerView.Adapter<UserTodoAdapter.ViewHolder> {
private List<UserTodo> mUserTodo;
private Callback mCallback;
private DatabaseReference mUserTodoRef;
public UserTodoAdapter(Callback callback) {
mCallback = callback;
mUserTodo = new ArrayList<>();
// need to get the push key from AddUser activity
mUserTodoRef = FirebaseDatabase.getInstance.getReference().child(users).child("Need the push key here").child("todo");
mUserTodoRef.addChildEventListener(new TodoChildEventListener());
}
private class TodoChildEventListener implements ChildEventListener{
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s){
// action here
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s){
// action here
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot){
// action here
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s){
// action here
}
@Override
public void onCancelled(DatabaseError databaseError){
// action here
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.a_custom_view, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position){
final UserTodo userTodo = mUserTodo.get(position);
holder.mTodoTitle.setText(userTodo.getTodoTitle());
holder.mTodoDesc.setText(userTodo.gerTodoDesc());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCallback.onEdit(userTodo);
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
removeTodo(mUserTodo.get(position));
return true;
}
});
}
@Override
public int getItemCount(){
return mUserTodo.size();
}
public interface Callback{
public void onEdit(UserTodo userTodo);
}
class ViewHolder extends RecyclerView.ViewHolder{
private TextView mTodoTitle;
private TextView mTodoDesc;
public ViewHolder(View itemView){
super(itemView);
mTodoTitle = (TextView) itemView.findViewById(R.id.tvTodoTitle);
mTodoDesc = (TextView) itemView.findViewById(R.id.tvTodoDesc);
}
}
public void addTodo(UserTodo userTodo){
mUserTodoRef.push().setValue(userTodo);
}
public void updateTodo(UserTodo userTodo, String newTodoTitle, String newTodoDesc){
userTodo.setTodoTitle(newTodoTitle);
userTodo.setTodoDesc(newTodoDesc);
mUserTodoRef.child(userTodo.getTodoKey()).setValue(userTodo);
}
public void removeTodo(UserTodo userTodo){
mUserTodoRef.child(userTodo.getTodoKey()).removeValue();
}
}
Nachdem der Benutzer auf Schaltfläche Weiter in AddUser
Aktivität geklickt wird, die Benutzerdaten straightly zu Firebase hinzugefügt, und der Benutzer wird zuumgeleitet 210 Seite, auf der der Benutzer Aufgaben hinzufügen kann. Wie übergibt man den in AddUser
erstellten Push-Key, so dass, wenn der Benutzer die Aufgaben hinzufügt, die Artikel unter dem Benutzer hinzugefügt werden?
Wird Absicht richtig verwendet?
Bitte fragen Sie mich nicht, warum ich den Benutzer direkt nach der Erstellung des Benutzers zur Aufgabenliste hinzufügen lassen muss. So ist es nötig.
Dank
Edit: Es tut mir leid, ich sollte erwähnen, dass die Absicht zu UserTodoAdapter
-Klasse übergeben werden sollte, so dass in der Firebase Datenbankreferenz von UserTodoAdapter
ich den Verweis auf die von AddUser
weitergegeben Schlüssel verweisen.
Ich habe Klassen UserDetails
und UserTodo
, für Aktivitäten AddUser
und ToDo
bzw. Daten in Firebase zu handhaben.
Schließlich werden die Daten wie folgt aussehen:
{
"users":{
"push_id":{
"userid":"123456",
"username":"My User",
"todo_s":{
"push_id":{
"todo1":"Title1",
"todo_desc":"Description"
},
"push_id":{
"todo2":"Title2",
"todo_desc":"Description"
},
}
},
}
}
Können Sie vorschlagen, wie Sie den Wert von "AddUser" zu "UserTodoAdapter" übergeben? –
das kann nicht direkt getan werden, da 'UserTodoAdapter' in einer anderen Aktivität deklariert ist, die' ToDo' ist, außer das 'UserTodoAdapter' im AddUser deklariert ist – Wilik
Yeah I know. Deshalb kann ich nicht herausfinden, wie ich den Wert "UserTodoAdapter" übergeben soll. –