Как правильно подключить и отобразить данные из Firebase в настраиваемый вид списка Android Studio - PullRequest
0 голосов
/ 23 октября 2018

У меня есть пользовательский ListView, который отображает мои данные из базы Firebase, но это неверно.

Изображение текущего выхода

Изображение базы данныхСтруктура

Как видно на изображениях, она отображает все данные в одну строку "[a, ab, abc]".Это неправильно, потому что мне нужно, чтобы он отображался в каждой строке следующим образом.

a

ab

abc

Я сохранил данные, которые я извлек из firebaseв списке массивов

private ArrayList<String> arrayList = new ArrayList<String>();

я сохранил его с помощью addChildEventListener

 mDatabase.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            String string = dataSnapshot.getValue(String.class);

            arrayList.add(string);

            customAdapter.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) {

        }

    });

А вот как я сделал свой пользовательский адаптер

public class CustomListAdapter extends ArrayAdapter<String>{

    @Override
    public int getCount() {
        return arrayList.size();
    }

    private final Activity context;
   private final Integer[] imgid;

    private final ArrayList<String> arrayList;

    public CustomListAdapter(Activity context, ArrayList<String> arrayList, Integer[] imgid) {
        super(context, R.layout.customlayout);
        // TODO Auto-generated constructor stub

        this.context=context;
        this.arrayList = arrayList;

        //this.itemname=itemname;
        this.imgid=imgid;


    }

    public View getView(int position,View view,ViewGroup parent) {
        LayoutInflater inflater=context.getLayoutInflater();
        View rowView=inflater.inflate(R.layout.customlayout, null,true);

        ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView);
        TextView txtTitle = (TextView) rowView.findViewById(R.id.textView_name);


        txtTitle.setText(arrayList.toString());
        imageView.setImageResource(imgid[position]);

        return rowView;

    }
}

, затем я объявил пользовательскийАдаптер в OnCreate

customAdapter = new CustomListAdapter(Form1Main.this, arrayList, imgid);

Теперь мне просто нужно правильно выполнить итерацию по вертикали вместо того, чтобы иметь вывод, подобный тому, что показан на первом рисунке [a, ab, abc], до

a


ab


abc

1 Ответ

0 голосов
/ 24 октября 2018

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

ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        ArrayList<String> arrayList = new ArrayList<String>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String string = ds.getValue(String.class);
            arrayList.add(string);
            Log.d(TAG, string);
        }
        CustomListAdapter customAdapter = new CustomListAdapter(Form1Main.this, arrayList, imgid);
        yourListView.setAdapter(customAdapter);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
producmDatabasetsRef.addListenerForSingleValueEvent(valueEventListener);

Пожалуйста, проверьте logcat.

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