java - Android:传递允许 recyclerview 由特定字符串填充的变量

标签 java android firebase-realtime-database android-recyclerview

我正在尝试创建一个代码,说明“如果登录的用户名与创建的食谱的用户名匹配,则仅在我的 MyRecipes.java Activity 的 recyclerview 中显示这些数据库条目”。我无法确定将这个潜在声明放在哪里。看看我的代码,如果或否则,您会将该语句放在哪里?

userLoggedIn 和loggingUser 是当前登录用户的变量。

thisUser 是我在 recyclerview.java 类中填充 recyclerview 时从数据库中提取的用户设置的。

任何帮助将不胜感激!

RecyclerView.java类

    private static String thisUser;
    String userLoggedIn = HomeActivity.getUserLogged();
    private Context mContext;
    private RecipesAdapter mRecipeAdapter;

    public void setConfig (RecyclerView recyclerView, Context context, List<Recipes> recipes, List<String> keys){

        mContext = context;
        mRecipeAdapter = new RecipesAdapter(recipes, keys);
        recyclerView.setLayoutManager(new LinearLayoutManager(context));
        recyclerView.setAdapter(mRecipeAdapter);
    }

    class RecipeItemView extends RecyclerView.ViewHolder{
        private TextView mTitle;
        private TextView mIngredients;
        private TextView mMethod;
        private TextView mUser;
        private String key;

        public RecipeItemView(ViewGroup parent){
            super(LayoutInflater.from(mContext).inflate(R.layout.recipe_list_item, parent,false));

            mTitle = (TextView) itemView.findViewById(R.id.tvTitle);
            mMethod = (TextView) itemView.findViewById(R.id.tvMethod);
            mIngredients = (TextView) itemView.findViewById(R.id.tvIngredients);
            mUser = (TextView) itemView.findViewById(R.id.tvUser);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(mContext, RecipeDetails.class);
                    intent.putExtra("key", key);
                    intent.putExtra("title", mTitle.getText().toString());
                    intent.putExtra("ingredients", mIngredients.getText().toString());
                    intent.putExtra("method", mMethod.getText().toString());

                    mContext.startActivity(intent);
                }
            });
        }

        public void bind(Recipes recipes, String key) {

                mTitle.setText(recipes.getTitle());
                mIngredients.setText(recipes.getIngredients());
                mMethod.setText(recipes.getMethod());
                mUser.setText(recipes.getCreatedUser());
                thisUser = mUser.getText().toString().trim();
                this.key = key;
            }
    }

    public static String getUserLoggedIn(){
        return thisUser;
    }

    class RecipesAdapter extends RecyclerView.Adapter<RecipeItemView> {
        private List<Recipes> mRecipeList;
        private List<String> mKeys;

        public RecipesAdapter(List<Recipes> mRecipeList, List<String> mKeys) {
            this.mRecipeList = mRecipeList;
            this.mKeys = mKeys;
        }

        @NonNull
        @Override
        public RecipeItemView onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return new RecipeItemView(parent);
        }

        @Override
        public void onBindViewHolder(@NonNull RecipeItemView holder, int position) {
            holder.bind(mRecipeList.get(position), mKeys.get(position));
        }

        @Override
        public int getItemCount() {
            return mRecipeList.size();
        }
    }
}

MyRecipes.java(回收器 View 填充并显示所有食谱)

    String loggedUser = HomeActivity.getUserLogged();
    String thisUser = RecyclerViewConfig.getUserLoggedIn();
    Button addRecipes;
    private RecyclerView mRecyclerView;
    private String passedUsername;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_recipes);

        passedUsername = getIntent().getStringExtra("loggedUsername1");
        mRecyclerView = (RecyclerView) findViewById(R.id.rvRecipes);
        new FirebaseDatabaseHelper().readRecipes(new FirebaseDatabaseHelper.DataStatus() {
            @Override
            public void DataIsLoaded(List<Recipes> recipes, List<String> keys) {
                    new RecyclerViewConfig().setConfig(mRecyclerView, MyRecipesActivity.this, recipes, keys);
                }

            @Override
            public void DataIsInserted() {
            }

            @Override
            public void DataIsUpdated() {
            }

            @Override
            public void DataIsDeleted() {
            }
        });

        addRecipes = findViewById(R.id.btnAddNewRecipe);
        addRecipes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent addrecipe = new Intent(MyRecipesActivity.this, AddRecipes.class);
                addrecipe.putExtra("loggedUsername2", passedUsername);
                startActivity(addrecipe);
            }
        });
    }
}

最佳答案

如果我理解正确的话,只有当用户是创建菜谱的人时,您才需要向用户显示菜谱吗?假设,对代码进行以下更改即可解决问题。

如下更改您的bind()方法。

public void bind(Recipes recipes, String key) {
        thisUser = mUser.getText().toString().trim();
        if(thisUser.equals(recipes.getCreatedUser)) {
           mTitle.setText(recipes.getTitle());
           mIngredients.setText(recipes.getIngredients());
           mMethod.setText(recipes.getMethod());
           mUser.setText(recipes.getCreatedUser());
           this.key = key;
        }
}

虽然这是一种幼稚的方法,但更好的方法是当您使用 readRecipes() 方法本身从 Firebase 加载数据时,使用创建的用户过滤食谱列表。为此,可以使用如下查询(根据您的数据库结构,下面的确切查询可能不适用于您。根据需要进行更改)

Query query = reference.child("Recipes").orderByChild("userCreated").equalTo(thisUser);

关于java - Android:传递允许 recyclerview 由特定字符串填充的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59739638/

相关文章:

java - 在java中滚动加权数字1-6

java - Android - AsyncTask 上的 RuntimeException

android - ViewPager 停止显示 fragment

android - 重新创建的 Activity 是否记得启动它的原始 Intent ?

swift - Firebase - 更改/删除子项时在所有 TableView 中显示重复的 TableView 行

Java:对于 Do 语句中的语句?

java - NotificationListenerService : NullPointerException on getActiveNotifications

java - 进程死亡时导航图作用域 ViewModel

javascript - 输入值不保存,当推送到数组时给出未定义的值

swift - 如何引用多个值 Firebase Swift