【问题标题】:Android load imageView with drawable depending on data received from firebaseAndroid根据从firebase接收的数据加载带有drawable的imageView
【发布时间】:2020-08-05 18:32:32
【问题描述】:

根据从 Firebase 数据库接收到的字符串数据,我找不到从可绘制文件夹将图像设置为 imageView 的方法。

我像这样从 Firebase 数据库中获取值:

    DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("Persons");
    Query personsQuery = personsRef.orderByKey();
    FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<Adapter>().setQuery(personsQuery, Adapter.class).build();
    
             mAdapter = new FirebaseRecyclerAdapter<Adapter, Tab1.MyViewHolder>(personsOptions) {
                            @Override
                            protected void onBindViewHolder(Tab1.MyViewHolder holder, final int position, final Adapter model) {
                
                                holder.setTitle(model.getTitle());
                                holder.setDate(model.getDate());
        }

            @Override
            public Tab1.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_tab1, parent, false);
                return new Tab1.MyViewHolder(view);
            }
        };

目标是根据从 Firebase 加载的数据,使用可绘制文件夹中的图像填充 RecyclerView 中的图像视图。类似于:如果从 firebase = 1 加载“title”,则将 imageView 设置为 R.drawable.thisPerson1。

【问题讨论】:

    标签: android database firebase imageview drawable


    【解决方案1】:

    您可以将收到的字符串附加到 ImageView 资源 ID

    DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("Persons");
    Query personsQuery = personsRef.orderByKey();
    FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<Adapter>().setQuery(personsQuery, Adapter.class).build();
    
             mAdapter = new FirebaseRecyclerAdapter<Adapter, Tab1.MyViewHolder>(personsOptions) {
                            @Override
                            protected void onBindViewHolder(Tab1.MyViewHolder holder, final int position, final Adapter model) {
                
                                holder.setTitle(model.getTitle());
                                holder.setDate(model.getDate());
                                holder.yourImageView.setImageResource(R.drawable+"."+model.getImage())
        }
    
            @Override
            public Tab1.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_tab1, parent, false);
                return new Tab1.MyViewHolder(view);
            }
        };
    

    【讨论】:

    • 谢谢!这是解决问题的最快方法。 holder.yourImageView.setImageResource(getResources().getIdentifier((model.getImage()),"drawable", getActivity().getPackageName()));
    【解决方案2】:

    如果标题是像 0..10 这样的数字,那么你可以尝试创建 res 数组:

    如果是 1..10 则尝试使用 model.getTitle() - 1 等。

    <integer-array name="some_name">
        <item>@drawable/thisPerson1</item>
        <item>@drawable/thisPerson2</item>
        <item>@drawable/thisPerson3</item>
        <item>@drawable/thisPerson4</item>
    </integer-array>
    
    private TypedArray imagesArray = getResources().obtainTypedArray(R.array.some_name);
    private int image = imagesArray.getResourceId(imagesArray.getIndex(title), defaultValue)
    
    ImageView.setBackgroundResource(image)
    
    imagesArray.recycle()
    

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 2019-01-30
      • 2017-05-28
      • 2021-05-31
      • 2018-07-13
      相关资源
      最近更新 更多