如何在frgaments中使用recyclerview在firestore中显示数据?

时间:2017-12-23 18:44:42

标签: database firebase android-fragments android-recyclerview google-cloud-firestore

我是android编程的新手,我在从firestore显示数据时遇到了问题。我想在导航抽屉中以片段形式显示数据。我找到了在活动中显示它的教程,但没有任何碎片。请帮帮我。

public class MainActivity extends AppCompatActivity {

Toolbar toolbar;
DrawerLayout drawerLayout;
ActionBarDrawerToggle actionBarDrawerToggle;
NavigationView navigationView;
FragmentTransaction fragmentTransaction;
private boolean shouldLoadProductFragOnBackPress = false;
public static int navItemIndex = 0;
public FirebaseAuth mAuth;
FirebaseFirestore db = FirebaseFirestore.getInstance();
private void Load_Product_fragment() {
    navItemIndex = 0;
    fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.maincontainer,new ProductFragment());
    fragmentTransaction.commit();
    getSupportActionBar().setTitle(R.string.Productfragment_Title);
    drawerLayout.closeDrawers();


}
private void Load_Service_fragment(){
    navItemIndex = 1;
    fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.maincontainer,new ServiceFragment());
    fragmentTransaction.commit();
    getSupportActionBar().setTitle(R.string.Servicefragmnet_Title);
    drawerLayout.closeDrawers();
    shouldLoadProductFragOnBackPress = true;

}
private void Load_Account_fragment(){
    navItemIndex = 2;
    fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.maincontainer,new AccountFragment());
    fragmentTransaction.commit();
    getSupportActionBar().setTitle(R.string.Accountfragment_Title);
    drawerLayout.closeDrawers();
    shouldLoadProductFragOnBackPress = true;

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar=(Toolbar)findViewById(R.id.Toolbar_Layout);
    setSupportActionBar(toolbar);
    drawerLayout=(DrawerLayout) findViewById(R.id.Drawer_Layout);
    actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close);
    drawerLayout.addDrawerListener(actionBarDrawerToggle);

    drawerLayout.openDrawer(Gravity.LEFT);

    Load_Product_fragment();

    navigationView= findViewById(R.id.Navigation_View);
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId())
            {
                case R.id.Productsfragment_ND:
                    Load_Product_fragment();
                    item.setChecked(true);
                    break;

                case R.id.Servicefragment_ND:
                    Load_Service_fragment();
                    item.setChecked(true);
                    break;

                case R.id.Accountfragemnt_ND:
                    Load_Account_fragment();
                    item.setChecked(true);
                    break;
            }
            return false;
        }
    });
}

@Override
public void onBackPressed() {
    if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
        drawerLayout.closeDrawers();
        return;
    }

    // This code loads home fragment when back key is pressed
    // when user is in other fragment than home
    if (shouldLoadProductFragOnBackPress) {
        // checking if user is on other navigation menu
        // rather than home
        if (navItemIndex !=0) {
            navItemIndex = 0;
            shouldLoadProductFragOnBackPress = false;
            Load_Product_fragment();


            return;
        }
    }

    super.onBackPressed();
}




@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    actionBarDrawerToggle.syncState();
}

public void del(View view) {db.collection("products").document("test")
        .delete()
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {

            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {

            }
        });

}
}

这是我的主要活动。它包含3个片段的导航抽屉的要求。我有一个链接到应用程序的Firestore数据库。我需要在这些片段中显示数据库的内容。

  • 接下来我将展示一个片段以及我尝试过使用的recyclerview适配器和视图支架。
  • 我不确定这是否是正确的方法。请帮助我

    public class ProductFragment extends Fragment {
    
    private static final String TAG = ProductFragment.class.getSimpleName();
    private RecyclerView recipeRecyclerview;
    private LinearLayoutManager linearLayoutManager;
    private Product_adapter mAdapter;
    private DatabaseReference mDatabaseRef;
    private DatabaseReference childRef;
    
    public ProductFragment() {
    // Required empty public constructor
    }
    
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    
    // Inflate the layout for this fragment
    View view = inflater.inflate    (R.layout.fragment_product, container, false);
    
    
    getActivity().setTitle(getString(R.string.Productfrag_title));
    linearLayoutManager = new LinearLayoutManager(getActivity());
    recipeRecyclerview = view.findViewById(R.id.List_recycleview);
    recipeRecyclerview.setHasFixedSize(true);
    mDatabaseRef = FirebaseDatabase.getInstance().getReference();
    childRef = mDatabaseRef.child("recipes");
    
    
    mAdapter = new Product_adapter(Product_response.class, R.layout.list_layout, View_holder.class, childRef, getContext());
    recipeRecyclerview.setLayoutManager(linearLayoutManager);
    recipeRecyclerview.setAdapter(mAdapter);
    return view;
    

    } } 这是我的产品片段。我试图添加回收站视图。

适配器

     public class Product_adapter extends RecyclerView.Adapter {

FirebaseFirestore db = FirebaseFirestore.getInstance();

private Context context;

Query query = db.collection("products");

FirestoreRecyclerOptions<Product_response> response = new FirestoreRecyclerOptions.Builder<Product_response>()
        .setQuery(query, Product_response.class)
        .build();


FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<Product_response, View_holder>(response) {

    @Override
    protected void onBindViewHolder(View_holder holder, int position, Product_response model) {

    }

    @Override
    public View_holder onCreateViewHolder(ViewGroup group, int i) {
        // Create a new instance of the ViewHolder, in this case we are using a custom
        // layout called R.layout.message for each item
        View view = LayoutInflater.from(group.getContext())
                .inflate(R.layout.list_layout, group, false);

        return new View_holder(view);
    }





};

public Product_adapter(Class<Product_response> product_responseClass, int list_layout, Class<View_holder> view_holderClass, DatabaseReference childRef, Context context) {
}


@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return null;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

}

@Override
public int getItemCount() {
    return 0;
}
}

查看持有人

    public class View_holder extends RecyclerView.ViewHolder{

private static final String TAG = View_holder.class.getSimpleName();
public TextView main_text, subtext ;
public ImageView image;

public View_holder(View itemView) {
    super(itemView);
    main_text = (TextView)itemView.findViewById(R.id.List_maintext);
    subtext = (TextView)itemView.findViewById(R.id.List_subtext);
    image = (ImageView)itemView.findViewById(R.id.List_imageview);
}
}
  • 接下来我将显示响应页面,其中我使用了firebase的getter和setter

    import com.google.firebase.firestore.IgnoreExtraProperties;
    
    @IgnoreExtraProperties
    public class Product_response {
    
    private String Product;
    private String Cost;
    
    public Product_response() {
    }
    
    public Product_response(String Product, String Cost){
    
    this.Product= Product;
    this.Cost= Cost;
    }
    
    public String getProduct() {
    return Product;
    }
    
    public void setProduct(String Product) {
    this.Product = Product;
    }
    
    public String getCost(){
    return Cost;
    }
    
     public void setCost(String Cost)
     {
    this.Cost = Cost;
    }
    
    }
    

    This is how my database looks like. I need to display this products in my fragment

This is the github link of the app. Please help me complete this

0 个答案:

没有答案