在RecyclerView中单击项目时如何获取详细信息?

问题描述 投票:0回答:1

我正在尝试获取在回收商视图中单击的配方的详细信息。我正在用它去编辑/删除功能。这是我主要活动的代码。

我要获取的详细信息是获取名称,成分和方法。

public class MainActivity extends AppCompatActivity implements RecipeListAdapter.OnItemClickListener  {
    private RecipeViewModel mRecipeViewModel;
    public static final int NEW_WORD_ACTIVITY_REQUEST_CODE = 1;
    public String Name;
    public String Ingredients;
    public String Method;
    private RecipeListAdapter mAdapter;
    private RecipeDao recDao;
    private LiveData<List<Recipe>> RecipeList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView recyclerView = findViewById(R.id.recyclerview);
        final RecipeListAdapter adapter = new RecipeListAdapter(this);
        recyclerView.setAdapter(adapter);
        adapter.setOnItemClickListener(MainActivity.this);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecipeViewModel = new ViewModelProvider(this).get(RecipeViewModel.class);

        mRecipeViewModel.getAllRecipes().observe(this, new Observer<List<Recipe>>() {
            @Override
            public void onChanged(@Nullable final List<Recipe> recipes) {
                // Update the cached copy of the words in the adapter.
                adapter.setWords(recipes);
            }
        });

        void onItemClick(int position) {
        //Delete Below test to pass data through
        Recipe recipe = new Recipe("Test", "Yeet", "Jim");


   // showAlertDialogBox();
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
    alertDialog.setTitle("Edit or Delete...");
    alertDialog.setPositiveButton("Edit", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            Intent update = new Intent(MainActivity.this, UpdateRecipeActivity.class);
            update.putExtra("Name", recipe.getName());
            update.putExtra("Ingredients", recipe.getIngredients());
            update.putExtra("Method", recipe.getMethod());
            startActivity(update);
        }
    });
    alertDialog.setNegativeButton("Delete", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            //Delete
        }
    });
    alertDialog.show();
}

如果需要,这里是Recipe.class!

@Entity(tableName = "recipe_table")
public class Recipe {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name= "recipeId")
private int RecipeId;
private String name;
private String Ingredients;
private String Method;
@Ignore
public Recipe(String name, String Ingredients, String Method) {
    this.RecipeId = RecipeId;
    this.name = name;
    this.Ingredients = Ingredients;
    this.Method = Method;
}

public Recipe(String name) {
    this.name = name;
}

public void changeText1(String text){
    name = text;
}

//Add Image somehow!


public int getRecipeId() {
    return RecipeId;
}

public void setRecipeId(int recipeId) {
    RecipeId = recipeId;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getMethod() {
    return Method;
}

public void setMethod(String method) {
    Method = method;
}

public String getIngredients() {
    return Ingredients;
}

public void setIngredients(String ingredients) {
    Ingredients = ingredients;
}
}

如果您需要其他文件,这些是我拥有的文件:-RecipeListAdapter-RecipeDao-RecipeRepository-RecipeRoomDatabase-RecipeViewModel

java android android-recyclerview adapter
1个回答
0
投票

在onItemClick内,还需要添加一个参数。

void onItemClick(int position, Recipe recipe) {
        //Delete Below test to pass data through
        arrayList.remove(recipe)
}

onItemClick方法将从适配器调用,从那里必须传递选定的代码。在适配器中,您必须使用recipeList.get(getAdapterPosition())来获取所单击的食谱并将其传递给接口方法onItemClick及其位置。

所以您的代码在适配器中将看起来像这样,

itemClickListener.onItemClick(位置,recipeList.get(getAdapterPosition()))>

仅作为说明,这里您需要使用ArrayList来执行删除操作,而不是List。

© www.soinside.com 2019 - 2024. All rights reserved.