且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何从Firebase数据库读取数据并使用ArrayAdapter在ListView中显示多个字段

更新时间:2022-06-03 03:20:21

被困两天后,我得以回答自己的问题!希望这将有助于将来的初学者尝试在ArrayAdapter中显示自定义视图.基本上,我创建了一个自定义的ArrayAdapter类,其中可以包含三个TextViews.

after two days of being stuck I was able to answer my own question! Hopefully this will help future beginners stuck trying to display a custom view within an ArrayAdapter. Basically, I created a custom ArrayAdapter class which could hold three TextViews inside of it.

我绝不是专家,也无法像其他人一样对此进行解释,因此,我将粘贴指向我遵循并成功的两个视频教程的链接.

I am in no means an expert and will not be able to explain this as well as others, so instead, I will paste a link to the two video tutorials that I followed and had success with.

Android初学者教程#8-用于显示多列的自定义ListView适配器 https://www.***.com/watch?v=E6vE8fqQPTE&t= 392s

Android Beginner Tutorial #8 - Custom ListView Adapter For Displaying Multiple Columns https://www.***.com/watch?v=E6vE8fqQPTE&t=392s

Android初学者教程#9-自定义ListView适配器[带有加载动画] https://www.***.com/watch?v=SApBLHIpH8A

Android Beginner Tutorial #9 - Custom ListView Adapter [With Loading Animation] https://www.***.com/watch?v=SApBLHIpH8A

这是我下面更新的代码:

Here is my updated code below:

public class CustomAdapter extends BaseAdapter {

    private static ArrayList<SearchModel> searchArrayList;
    private LayoutInflater mInflater;
    private Context mContext;
    private int lastPosition;

    /**
     * Holds elements in a view
     */
    static class ViewHolder {
        TextView make;
        TextView model;
        TextView stock;
    }

    public CustomAdapter(Context context, ArrayList<SearchModel> results) {
        searchArrayList = results;
        mContext = context;
        mInflater = LayoutInflater.from(context);
    }

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

    @Override
    public Object getItem(int position) {
        return searchArrayList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        String make = searchArrayList.get(position).getMake();
        String model = searchArrayList.get(position).getModel();
        String stock = searchArrayList.get(position).getStock();

        final View result;

        ViewHolder holder;

        if (convertView == null) {

            LayoutInflater inflater = LayoutInflater.from(mContext);
            convertView = inflater.inflate(R.layout.list_item, parent, false);
            holder = new ViewHolder();
            holder.make = (TextView) convertView.findViewById(R.id.tv_list_item_make);
            holder.model = (TextView) convertView.findViewById(R.id.tv_list_item_model);
            holder.stock = (TextView) convertView.findViewById(R.id.tv_list_item_stock);

            result = convertView;
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
            result = convertView;
        }

        Animation animation = AnimationUtils.loadAnimation(mContext,
                (position > lastPosition) ? R.anim.load_down_anim : R.anim.load_up_anim);
        result.startAnimation(animation);
        lastPosition = position;

        holder.make.setText(make);
        holder.model.setText(model);
        holder.stock.setText(stock);

        return convertView;
    }
}

MainActivity.java(仅onCreate方法)

MainActivity.java (Only the onCreate method)

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        databaseReference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
                String make = snapshot.child("make").getValue(String.class);
                String model = snapshot.child("model").getValue(String.class);
                String stock = snapshot.child("stock").getValue(Long.class).toString();
                SearchModel searchModel = new SearchModel(make, model, stock);
                searchList.add(searchModel);

              CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), searchList);

                mListView = (ListView) findViewById(R.id.lv_searches);
                mListView.setAdapter(customAdapter);
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
            }

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

            @Override
            public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
            }

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