Привет, я пытаюсь сделать приложение chatApp. Я успешно выполняю начальные шаги, такие как аутентификация пользователя, регистрация. После успешного входа в систему пользователь получает экран, как показано на этом изображении:
Теперь список пользователей здесь генерируется следующим кодом:
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 или любой другой возможный метод для этого?
Сначала я пытался использовать представление ресайклера, но мне это не удалось, поэтому я переключился на ListView.
ListView
устарел. Вы должны переключиться на RecyclerView
проверь мой ответ и дай мне знать
После
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 с заголовком картик. Итак, как мне получить доступ к этому имени, Картик?
хорошо, для этого создайте действие, такое как ChatDetailActivity, с заголовком имени человека, соответствующим образом измените заголовок и запустите это действие в элементе списка, щелкнув
Используйте 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
}
});
Спасибо, теперь мне просто нужно сделать намерение.
вместо этого вам нужен собственный адаптер
ArrayAdapter
, и там вы можете установить свойonClickListener
. ВместоListView
вам лучше использоватьRecyclerView