私は各アイテムがタイトル、文字列とボタンのArrayListから、ArrayListの各エントリが新しいリスト項目を作成するようにします。Android:リストビューからのインデックスを使用してデータベースから削除 - リストで作成されたビューで作成されたIDの配列にアクセスできない
また、対応する主キーの別のArrayListがあります。これは、SQLiteデータベースから特定のアイテムを削除するために使用したいものですが、リストビューでは使用されません(IDは表示しません。リストをpoplulateする文字列は必ずしも一意ではないため、削除に使用することはできません)。
リストビューのgetViewメソッドには、ユーザーが削除ボタンをクリックしたときにボタンが押された位置がわかっているので、うまくいけば呼び出すことができますid [position]を使ったデータベースの削除メソッドですが、リストビュー自体がアクティビティの後に作成されているため、id配列を解決できないのでdeleteを呼び出すことはできません。
public class TodayListActivity extends AppCompatActivity {
private ArrayList<String> names = new ArrayList<>();
FoodDB Db = null;
int deleteId;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_todaylist);
ListView lv = (ListView) findViewById(R.id.today_meal_list);
Bundle a = this.getIntent().getExtras();
String[] id = a.getStringArray("idArray"); //used to delete
String[] mealNames = a.getStringArray("mealNamesArray"); //displayed
Collections.addAll(names, mealNames);
//call the list adapter to create views based off the array list 'names'
lv.setAdapter(new MyListAdapter(this, R.layout.list_item, names));
}
protected class MyListAdapter extends ArrayAdapter<String> {
private int layout;
private MyListAdapter(Context context, int resource, List<String> objects) {
super(context, resource, objects);
layout = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewHolder viewholder;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(layout, parent, false);
viewholder = new viewHolder();
viewholder.title = (TextView) convertView.findViewById(R.id.report_meal_name);
viewholder.delButton = (Button) convertView.findViewById(R.id.button_delete_meal);
viewholder.delButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (Integer)v.getTag();
//int deleteId derived from id[position]
deleteId = Integer.parseInt(id[position]);
idToDelete(deleteId);
//update the list view to exclude the deleted item
names.remove(position);
notifyDataSetChanged();
}
});
convertView.setTag(viewholder);
} else {
viewholder = (viewHolder) convertView.getTag();
}
//set string value for title
viewholder.title.setText(getItem(position));
viewholder.delButton.setTag(position);
return convertView;
}
}
public class viewHolder {
TextView title;
TextView delButton;
}
//delete from database
public void idToDelete(int DeleteId){
Db.deleteFoods(deleteId);
}
}
方法や場所(IDアレイがある活動に)リストビューから位置指標のいずれかを取得したり、内部IDアレイへのアクセスを取得するためになど任意の提案リストビューは高く評価されるだろう!
ブリリアント!ありがとうございました。私は引数を追加しようとしましたが、クラスに追加することは私には起こりませんでした。乾杯! – quixo