java - Android:传递允许recyclerview由特定字符串填充的变量
问题描述
我正在尝试创建一个代码,上面写着“登录的用户名与创建的配方的用户名相匹配,仅在我的 MyRecipes.java 活动的 recyclerview 中显示这些数据库条目”。我无法确定将这个潜在声明放在哪里。查看我的代码,如果或其他情况,您会将该语句放在哪里?
userLoggedIn 和 loggedUser 是当前登录用户的变量。
thisUser 是我设置为当 recyclerview 在 recyclerview.java 类中填充时从数据库中提取的用户。
任何帮助将不胜感激!
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(回收器视图填充并显示所有食谱的位置)
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);
推荐阅读
- vba - Word 中的 DOCVARIABLES 未初始化
- angular - Darken Angular Material 深色主题
- amazon-web-services - 如何在我的 AWS 中读取账户基础设施
- android - ¿ 如何修复 android studio 中的侧边菜单功能?
- javascript - 如何在不重新编译的情况下更改包含文件的内容?
- go - 如何获取时间戳的毫秒值
- sql - 使用字段 SQL 中的当前文本更新多行上的文本字段
- python - 在 Flask 中导入 tensorflow 导致它挂起
- reactjs - React 测试库 - 嵌套组件使父级无法正确呈现
- c++builder - 标准库的 C++ Builder 10.3 链接器问题