2016-11-20 3 views
0

Я разрабатываю приложение для Android, и я уже реализовал аутентификацию с помощью Firebase. После входа в систему, в моем NavigationDrawerActivity у меня есть ListView, что я установил FirebaseListAdapater, чтобы получить данные, специфичные для пользователя.Как удалить выбранный элемент в ListView, который работает с FirebaseListAdapter?

В моем onCreate() методе я следующее:

 firebaseAuth = FirebaseAuth.getInstance(); 
     FirebaseUser localUser = firebaseAuth.getCurrentUser(); 
     String localUserEmail = localUser.getEmail(); 
     String localUserEmailUniqueID = getEmailAddressUniqueID(localUserEmail); 
     String dbUsersRoot = "https://DATABASENAME.firebaseio.com/Users/"; 
     String dbUniqueRefForCurrentUser = dbUsersRoot + localUserEmailUniqueID +"/parishioners"; 

     DatabaseReference databaseReferenceCurrentUser = FirebaseDatabase.getInstance().getReferenceFromUrl(dbUniqueRefForCurrentUser); 

     final FirebaseListAdapter<String> firebaseListAdapter = new FirebaseListAdapter<String>(
       this, 
       String.class, 
       android.R.layout.simple_list_item_2, 
       databaseReferenceCurrentUser 
     ) { 
      @Override 
      protected void populateView(View v, String model, int position) { 
       TextView textView = (TextView) v.findViewById(android.R.id.text1); 
        textView.setText(model); 
       } 
      }; 

     mListView.setAdapter(firebaseListAdapter); 

Теперь в моем onStart() метод Я добавил setOnClickListener к кнопке, которая хочет, чтобы добавить новый элемент в мой список, как это:

@Override 
    protected void onStart(){ 
     super.onStart(); 

     mButtonAdd.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       firebaseAuth = FirebaseAuth.getInstance(); 
       FirebaseUser localUser = firebaseAuth.getCurrentUser(); 
       String localUserEmail = localUser.getEmail(); 
       String localUserEmailUniqueID = getEmailAddressUniqueID(localUserEmail); 
       String dbUsersRoot = "https://DATABASENAME.firebaseio.com/Users/"; 
       String dbUniqueRefForCurrentUser = dbUsersRoot + localUserEmailUniqueID +"/parishioners"; 
       DatabaseReference databaseReferenceCurrentUser = FirebaseDatabase.getInstance().getReferenceFromUrl(dbUniqueRefForCurrentUser); 

       databaseReferenceCurrentUser.push().setValue(editTextNewMember.getText().toString().trim()); 
      } 
     }); 
} 

при нажатии на кнопку Добавить, я буду иметь в моей базе данных что-то вроде этого (если предположить, что EditText имеет в нем строку «капуччино»):

"luminittta" : { 
     "parishioners" : { 
     "-KX1GcEWPMy7oFWgt_3h" : "capuccino" 

Теперь мой список покажет 'capuccino' (так как это база данных в реальном времени, мой список автоматически обновится с добавленной стоимостью).

Мой вопрос: Как я могу реализовать следующую функцию удаления, когда пользователь долго нажимает на элемент из ListView, он удаляется?

Вся база данных выглядит следующим образом:

{ 
    "Users" : { 
    "davidivanmircea" : { 
     "parishioners" : { 
     "-KX1FNcgSXgsMNz6QRIS" : "Gus Crick", 
     "-KX1FVIzzPM4nMrMvm9x" : "Florentino Williams", 
     "-KX1FZ27M-KS5TQZQ76u" : "Marc Raff", 
     "-KX1FbercKpPrl9r9tb4" : "Frederick Haddon", 
     "-KX1FgguOlRRN4sZKS8Z" : "Cristobal Wolfe", 
     "-KX1FkgwifQLIHplsZNx" : "Scott Nodal", 
     "-KX1Fp64Sa2QD94GR9uK" : "Odis Nevers", 
     "-KX1FrYK5PeuBucEiamY" : "Chauncey Mossman", 
     "-KX1FvIBDSrvppC3e4Ip" : "Alfonso Ignacio", 
     "-KX1Fy7dEHH8Z9JV-BRL" : "Douglas Hettinger", 
     "-KX1WdtbV4PEiscJV6E_" : "Daniel Muresan", 
     "-KX1WvYqekJZdWS6wGh6" : "Angelina Jolie" 
     } 
    }, 
    "luminittta" : { 
     "parishioners" : { 
     "-KX1GYuSsgmHyGk5LQLA" : "mocha", 
     "-KX1G_Q130sWitNGzlAR" : "triplo", 
     "-KX1GaPIhuIyhV4vmLGe" : "latte", 
     "-KX1GcEWPMy7oFWgt_3h" : "capuccino", 
     "-KX1Gf7TKY3N8IQETig-" : "machiatto", 
     "-KX1Gh4KoYpcVpCDFI2x" : "cafe melange", 
     "-KX1GoCutX3XO-CRWWB3" : "ristretto", 
     "-KX1GpvdE5i9UR2ZaX0K" : "americano", 
     "-KX1Grb8S5QZu4HT9cuW" : "espresso" 
     } 
    } 
    } 
} 

Большое спасибо за вашу помощь!

PS: Я изменил свое фактическое имя базы данных с помощью «DATABASENAME» внутри кода.

+0

См. Http://stackoverflow.com/questions/34110497/how-to-implement-a-setonitemclicklistener-firebaserecyclerviewadapter/34113070#34113070 –

+0

@FrankvanPuffelen Спасибо за ваш быстрый ответ, Фрэнк! Я отредактировал вопрос, как вы предложили. Я посмотрю ссылку, которую вы предоставили, и вернитесь после того, как я нашел решение. – SimpleFuzz

+0

Спасибо за это обновление. Намного лучше. Очистка комментариев. –

ответ

1

Изменить «populateView» к этому:

@Override 
protected void populateView(View v, String model, int position) { 
    TextView textView = (TextView) v.findViewById(android.R.id.text1); 
     textView.setText(model); 
    v.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     mRecycleViewAdapter.getRef(position).removeValue(); 
     Log.d("TAG", model + " removed from the list");     
     } 
    }); 
    } 
}; 
0

После прочтения кода Nirel и Франк при условии, я изменил свое FirebaseListAdapter в RecyclerView успешно и реализовать свою функцию удаления (по нажатию на элемент из списка).

Для записи RecyclerView не имеет встроенного onClickListener, поэтому любой, кто будет в той же ситуации, что и я, должен будет его реализовать. Я использовал http://www.littlerobots.nl/blog/Handle-Android-RecyclerView-Clicks/, и он работает как шарм.

 Смежные вопросы

  • Нет связанных вопросов^_^