Получить данные из Android Firebase, отобразить их в виде списка и применить onItemClickListener к ListView - PullRequest
0 голосов
/ 22 ноября 2018

Я новичок в Android Development.

Я хочу получить все заголовки (Title 1, Title 2, Title 3, Title 4) из Firebase и отобразить в listview, что я могу сделать.Но я хочу применить onItemClickListener к listview и хочу, чтобы при щелчке на определенном элементе в listview следующее действие показывало мне конкретное содержимое.например, если я нажму Title 1, то следующее действие должно отобразить Content 1.Если Title 2, то Content 2.

Пожалуйста, покажите, как я могу это сделать.

advaitavedanta-f1443
Chapter 1
description: "Content 1"
title: "Title 1"
Chapter 2
description: "Content 2"
title: "Title 2"
Chapter 3
description: "Content 3" 
title: "Title 3"
Chapter 4
description: "Content 4"
title: "Title 4"
//this is my data from firebase//



private static final String TAG = "MainActivity";
private FirebaseDatabase mDatabase;
private DatabaseReference mDbRef;

String Title;
String Description;
ListView listView;
ArrayList<String> mybook = new ArrayList<>();
ArrayAdapter<String> arrayAdapter;
Firebase url;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mDatabase = FirebaseDatabase.getInstance();
    mDbRef = mDatabase.getReference("Chapter 1");
    User user = new User("Title 1", "Content 1");
    mDbRef.setValue(user);

    mDbRef = mDatabase.getReference("Chapter 2");
    user = new User("Title 2", "Content 2");
    mDbRef.setValue(user);

    mDbRef = mDatabase.getReference("Chapter 3");
    user = new User("Title 3", "Content 3");
    mDbRef.setValue(user);

    mDbRef = mDatabase.getReference("Chapter 4");
    user = new User("Title 4", "Content 4");
    mDbRef.setValue(user);

    Firebase.setAndroidContext(this);

    listView =  findViewById(R.id.listView);
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, notes);
    listView.setAdapter(arrayAdapter);

    url = new Firebase("https://advaitavedanta-f1443.firebaseio.com/");

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(getApplicationContext(),MainContent.class);
            intent.putExtra("noteId", Description);

        }
    });
    url.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            Title = dataSnapshot.child("title").getValue(String.class);
            mybook.add(Title);
            Description = dataSnapshot.child("description").getValue(String.class);

        }

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

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

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

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
}

} `

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Поскольку вы используете объект User при добавлении данных Firebase, используйте список пользовательских объектов для извлечения его для вашего дочернего объекта.

Составьте список пользователей

ArrayList<User> users = new ArrayList<>();

Затемдля вашего ребенка добавьте это:

String title = dataSnapshot.child("title").getValue(String.class);
String description= dataSnapshot.child("description").getValue(String.class);
users.add(new User(title, description));

Затем, наконец, в вашем списке нажмите изменить дополнительные

Intent intent = new Intent(getApplicationContext(),MainContent.class);
intent.putExtra("content_description", users.get(position).getDescription());
startActivity(intent);

Примечание: Вы также можете поместить весь объект внамерение, но вам нужно сделать так, чтобы объект User реализовал пригодный для обработки.

Предложение: Используйте соответствующие имена переменных и имена классов.Поверь мне, это важно.Например, заголовок и содержание не должны быть в User классе, это больше похоже на то, чтобы быть в Book классе.

Надеюсь, это просветит вас, приятель, ура

0 голосов
/ 22 ноября 2018

Я вижу потенциальную проблему с вашим кодом.В вашем

listView.setOnItemClickListener (...), onItemClick ()

нет кода для фактического запуска нового действия.Вы только формируете Intent.

После,

Intent intent = new Intent (getApplicationContext (), MainContent.class);
intent.putExtra ("noteId", Описание);

Вы должны добавить,

startActivity (намерение);

Надеюсь, что вас отсортируют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...