【发布时间】:2021-06-17 20:47:36
【问题描述】:
我已经使用 Java 几个月了,但对 Android 还是很陌生。这是一个食谱持有者应用程序。
我在 ListView 上设置了 ArrayAdapter,我需要在 ListView 中选择一个项目并使用 Button 将其删除(我已经成功设置了将字符串添加到 Listview)。我将 ArrayList 用于存储成分对象的列表,而不是常规数组。我正在尝试使用 AdapterView.onSelectedItemListener 来识别 ListView 中的用户选择,然后使用 Button 删除所选项目。对于 Button,我正在实现 Button.onClickItemListener。
为了将列表项放入 ListView,我使用了一个对话框。我正在使用一个接口将对话框中的字符串输入发送到RecipeFragmentNew 中的ListView。我没有遇到从对话框获取字符串到 RecipeFragmentNew 的问题,所以我没有包含任何代码。
问题:按钮正在删除列表项,但它正在删除列表中的第一项,而不是正在选择的项。
Recipe.java
public class Recipe {
private UUID mID;
private String mName;
private Date mDate;
private boolean mIsFavorite;
private final ArrayList<Ingredient> ingredients;
public final ArrayList<Instruction> instructions;
public Recipe() {
mID = UUID.randomUUID();
mDate = new Date();
this.ingredients = new ArrayList<>();
this.instructions = new ArrayList<>();
}
public UUID getID() {
return mID;
}
public String getName() {
return mName;
}
public void setName(String name) {
mName = name;
}
public Date getDate() {
return mDate;
}
public void setDate(Date date) {
mDate = date;
}
public boolean isFavorite() {
return mIsFavorite;
}
public void setFavorite(boolean favorite) {
mIsFavorite = favorite;
}
public ArrayList<Ingredient> getIngredients() {
return ingredients;
}
public ArrayList<Instruction> getInstructions() {
return instructions;
}
}
Ingredient.java
public class Ingredient {
private String name;
private String amount;
public Ingredient(String name, String amount) {
this.name = name;
this.amount = amount;
}
public String getName() {
return name;
}
public String getAmount() {
return amount;
}
@Override
public String toString() {
return this.name + " " + this.amount;
}
}
arrayList 是使用 mRecipe.getIngredients() 从 Recipe 类中检索到的。
ListView 是 mIngredientWindow。
RecipeFragmentNew.java
public class RecipeFragmentNew extends Fragment implements IngredientListDialog.OnInputSelected {
public static final String TAG = "RecipeFragmentNew";
public static final String DIALOG_INGREDIENTS = "DialogIngredients";
private Recipe mRecipe;
private EditText mNameField;
private Button mIngredientAdd;
private Button mIngredientDelete;
private ListView mIngredientWindow;
private int listViewPosition;
private ArrayAdapter<Ingredient> listAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
UUID recipeId = (UUID) getArguments().getSerializable(ARG_RECIPE_ID);
mRecipe = RecipeQueue.get(getActivity()).getRecipe(recipeId);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.lists_detail_view, container, false);
mIngredientDelete = v.findViewById(R.id.delete_ingredient_button);
mIngredientDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < mRecipe.getIngredients().size(); i++) {
if (i == listViewPosition) {
mRecipe.getIngredients().remove(i);
}
listAdapter.notifyDataSetChanged();
}
}
});
listAdapter = new ArrayAdapter<Ingredient>(
getActivity(),
android.R.layout.simple_list_item_1,
mRecipe.getIngredients()
);
mIngredientWindow = v.findViewById(R.id.ingredients_window);
mIngredientWindow.setAdapter(listAdapter);
AdapterView.OnItemSelectedListener itemSelectedListener = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
listViewPosition = position;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
};
【问题讨论】:
标签: java android listview android-arrayadapter