bugfix> java > 投稿

基本的に、私はカスタム ListView を投入しようとしていますファイアーストアのコレクションからですが、数時間後にできなかったので、Stack Overflowで検索してこの質問を見つけました。

アダプターを使用してAndroid ListViewでfirestoreコレクションを表示する方法

アダプターとモデルを質問と比較しましたが、それらのいずれも間違っているようには見えなかったため、残っているオプションはメインファイルのみで、答えに示されているのと同じコードを使用しましたが、この行でエラーが発生しました

ProdAdapter mProductAdapter = new ProdAdapter(this, mProductsList);

error: incompatible types: anonymous OnCompleteListener(QuerySnapshot) cannot be converted to Context

答えでは、アダプターはgetメソッド内に作成されているため、その後作成しようとしましたが、エラーが残っています。 JavaとFirebaseについてはあまり知りませんが、コンテキストの取得方法、またはaddOnCompleteListener以外の別のメソッドを使用する必要があるかどうかを知りたいです。

MainActivity.java:

public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler{
        private ZXingScannerView scView;
        private ListView lista;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            final FirebaseFirestore db = FirebaseFirestore.getInstance();
            lista = findViewById(R.id.mylistView);
            db.collection("tasks").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    List<Product> mProductsList = new ArrayList<>();
                    if(task.isSuccessful()){
                        for(QueryDocumentSnapshot document : task.getResult()) {
                            Product miss = document.toObject(Product.class);
                            mProductsList.add(miss);
                        }
                        ProdAdapter mProductAdapter = new ProdAdapter(this, mProductsList);
                        mProductAdapter.notifyDataSetChanged();
                        lista.setAdapter(mProductAdapter);
                    }
                }
            });

        }

アダプター:

public class ProdAdapter extends ArrayAdapter<Product>{
    Context context;
    ArrayList<Product> object;
    public ProdAdapter(Context context, ArrayList<Product> object){
        super(context,0, object);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        if(convertView == null){
            convertView =  ((Activity)getContext()).getLayoutInflater().inflate(R.layout.product_view_model,parent,false);
        }
        Product dir = getItem(position);
        TextView prod = (TextView) convertView.findViewById(R.id.lblName);
        TextView description = (TextView) convertView.findViewById(R.id.lblDesc);
        TextView code = (TextView) convertView.findViewById(R.id.lblCode);
        TextView qty = (TextView) convertView.findViewById(R.id.lblQty);
        TextView price = (TextView) convertView.findViewById(R.id.lblPrice);
        prod.setText(dir.getProduct());
        description.setText(dir.getDescription());
        code.setText(dir.getId());
        qty.setText(dir.getQty());
        price.setText(dir.getPrice());
        return convertView;
    }
}

アイテムクラス:

package com.shop.shai.management_test.model;
public class Product {
    public String id;
    public String product;
    public String price;
    public String qty;
    public String description;
    public Product() {}
    public Product(String id, String product, String price, String qty, String description) {
        this.id = id;
        this.product = product;
        this.price = price;
        this.qty = qty;
        this.description = description;
    }
    public String getId(){
        return id;
    }
    public String getProduct(){
        return product;
    }
    public String getPrice(){
        return price;
    }
    public String getDescription(){
        return description;
    }
    public String getQty(){
        return qty;
    }
    public void setId(String id) {
        this.id = id;
    }
    public void setProduct(String product) {
        this.product = product;
    }
    public void setPrice(String price) {
        this.price = price;
    }
    public void setQty(String qty) {
        this.qty = qty;
    }
    public void setDescription(String description) {
        this.description = description;
    }
}

回答 1 件
  • この場合:

    ProdAdapter mProductAdapter = new ProdAdapter(this, mProductsList);
    
    

    キーワード「this」は、匿名クラス OnCompleteListener を指します  このコードがある場所。これを次のように変更します。

    ProdAdapter mProductAdapter = new ProdAdapter(MainActivity.this, mProductsList);
    
    

    これは、メインアクティビティのコンテキストで渡されます。これは、アダプタが実際にパラメータとして期待しているものです。

    public ProdAdapter(Context context, ArrayList<Product> object){
            super(context,0, object);
        }
    
    

あなたの答え