Как установить onClickListener для элементов в ListView (элементы списка генерируются динамически путем извлечения данных из firebase)

Привет, я пытаюсь сделать приложение chatApp. Я успешно выполняю начальные шаги, такие как аутентификация пользователя, регистрация. После успешного входа в систему пользователь получает экран, как показано на этом изображении:

Как установить onClickListener для элементов в ListView (элементы списка генерируются динамически путем извлечения данных из firebase) Теперь список пользователей здесь генерируется следующим кодом:

ListView listView;
View view;
ArrayList<String> usernames = new ArrayList<>();
String name;
FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference root = db.getReference();
DatabaseReference userRef = root.child("users");

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
   Bundle savedInstanceState) {
   view = inflater.inflate(R.layout.fragment_users,container,false);
   listView =(ListView) view.findViewById(R.id.listView);
   final ArrayAdapter <String> arrayAdapter = new ArrayAdapter<String> 
     (getContext(),android.R.layout.simple_list_item_1,usernames);
   listView.setAdapter(arrayAdapter);

   userRef.addChildEventListener(new ChildEventListener() {
     @Override
     public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
       String value = dataSnapshot.getValue().toString();
       try
       {
         JSONObject object = new JSONObject(value);
         name = object.getString("username");
       }
       catch(JSONException e)
       {
         e.printStackTrace();
       }

       usernames.add(name);
       arrayAdapter.notifyDataSetChanged();
     }

     @Override
     public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {}

     @Override
     public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {}

     @Override
     public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {}

     @Override
     public void onCancelled(@NonNull DatabaseError databaseError) {}
  });

  return view;
}

Теперь всякий раз, когда пользователь нажимает на определенное имя, я должен перевести его в messageActivity (точнее, в другое действие). Скажите, пожалуйста, как я могу добавить onClickListeners или любой другой возможный метод для этого?

вместо этого вам нужен собственный адаптер ArrayAdapter, и там вы можете установить свой onClickListener. Вместо ListView вам лучше использовать RecyclerView

anatoli 28.05.2019 09:55

Сначала я пытался использовать представление ресайклера, но мне это не удалось, поэтому я переключился на ListView.

jayanth 28.05.2019 09:58
здесь вы можете узнать больше о RecyclerView
anatoli 28.05.2019 09:59
ListView устарел. Вы должны переключиться на RecyclerView
anatoli 28.05.2019 10:00

проверь мой ответ и дай мне знать

Quick learner 28.05.2019 10:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
71
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

После

listView.setAdapter(arrayAdapter); 

создайте своего слушателя следующим образом:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        // Do what you want here
   }
});
Ответ принят как подходящий

Попробуй это

Объявите это в своем фрагменте или действии

private OnItemClickListener listPairedClickItem = new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView < ? > arg0, View arg1, int arg2, long arg3) {
        String personName = usernames.get(position);
        Toast.makeText( context, "listview clicked ", Toast.LENGTH_LONG ).show();
        Intent intent = new Intent(currenactivityname.this, activitytolaunchname.class);
        intent.putExtra("username",personName ); //get this name in next activity and show in title  bar
        startActivity(intent);
    }
};

Применение

listView.setOnItemClickListener( listPairedClickItem );

Большое спасибо Это работает. Но как мне перенаправить пользователя на новый интерфейс для чата с этим человеком. Например, я щелкнул имя картика из списка выше, и я должен каким-то образом перенаправить своего пользователя в chatActivity с заголовком картик. Итак, как мне получить доступ к этому имени, Картик?

jayanth 28.05.2019 11:31

хорошо, для этого создайте действие, такое как ChatDetailActivity, с заголовком имени человека, соответствующим образом измените заголовок и запустите это действие в элементе списка, щелкнув

Quick learner 28.05.2019 11:37

Используйте onItemClickListener :

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
      String selectedName = usernames.get(position);
      // Do what you want with username here

   }
});

Спасибо, теперь мне просто нужно сделать намерение.

jayanth 28.05.2019 11:40

Другие вопросы по теме