为了账号安全,请及时绑定邮箱和手机立即绑定

ArrayList 中每个对象的删除按钮

ArrayList 中每个对象的删除按钮

海绵宝宝撒 2023-10-19 21:22:22
我需要从 SQLite 数据库获取对象并在 ListView 中显示它们。此外,每个对象必须有 2 个可见按钮:编辑和删除。这是适配器的代码:public class ReminderListAdapter extends ArrayAdapter<Reminder> {private Context mContext;private int mResource;public ReminderListAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Reminder> objects) {    super(context, resource, objects);    mContext = context;    mResource = resource;}@NonNull@Overridepublic View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {    final int id = getItem(position).getId();    final String name = getItem(position).getName();    String hour = getItem(position).getHour();    String date = getItem(position).getDate();    LayoutInflater inflater = LayoutInflater.from(mContext);    convertView = inflater.inflate(mResource, parent, false);    final TextView resId = convertView.findViewById(R.id.textId);    final TextView resName = convertView.findViewById(R.id.textName);    final TextView resHour = convertView.findViewById(R.id.textHour);    final TextView resDate = convertView.findViewById(R.id.textDate);    resId.setText(String.valueOf(id));    resName.setText(name);    resHour.setText(hour);    resDate.setText(date);    Button delbtn = (Button) convertView.findViewById(R.id.button4);    Button editbtn = (Button) convertView.findViewById(R.id.button5);    delbtn.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {        }    });   editbtn.setOnClickListener(new View.OnClickListener() {       @Override       public void onClick(View v) {       }   });    return convertView;}/*public boolean delete_Reminder(String name2){    return database.delete(TABLE_REMINDERS, KEY_NAME + "=" + name2, null) > 0;}*/}我想我需要在我的适配器中实现这两个按钮。在代码中可以看到delbtn和editbtn的onClickListener。但我的问题是我不知道如何调用方法delete_Reminder(它也在Adapter中),因为我无法在这里创建DBHelper,并且无法连接到DB。抱歉,如果这是一个愚蠢的问题,这是第一个应用程序。
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

用于interface回调。Activity与Adapter之间的桥接接口;一旦用户在 Adapter 的视图上执行操作 - 给 Activity 回调。


界面


interface OnItemClickListener {

  void onItemClick(View view, int position, String name)

}

活动


public class EditActivity extends AppCompatActivity implements

    OnItemClickListener {

 ...


 @Override

 protected void onCreate(Bundle savedInstanceState) {

 ...

 ReminderListAdapter adapter = new ReminderListAdapter(this, R.layout.reminder_view, ReminderList);

 adapter.setListener(this);

 listView.setAdapter(adapter);

 ...

 }



 @Override

   public void onItemClick(final View view, final int position, final String name) {

    //Your callback

    delete_Reminder(name);

  }

}

适配器


public class ReminderListAdapter extends ArrayAdapter<Reminder> {

private Context mContext;

private int mResource;


  private final OnItemClickListener listener;


  public ReminderListAdapter(@NonNull Context context, int resource, 

  @NonNull ArrayList<Reminder> objects) {

  super(context, resource, objects);

  mContext = context;

  mResource = resource;

  }



 public setListener(final OnItemClickListener listener) {

   this.listener = listener;

 }

 ...


 @NonNull

 @Override

 public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {

  ...


  delbtn.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

      listener.onItemClick(convertView, position, name);

    }

  });

  }


}


查看完整回答
反对 回复 2023-10-19
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

  1. 您在每次循环迭代时设置适配器,而它应该在循环完成后仅设置一次。

  2. 我可以在您的代码中看到几个设计问题(如果这是您的应用程序,这是可以理解的。

  • ReminderList 以大写字母开头 - 按照惯例,变量和方法名称以小写字母开头,常量名称全部大写,类名称以大写字母开头

  • 我不确定您的应用程序要去哪里,但是当从数据库加载数据时,您可能需要考虑将它们加载到CursorAdapter而不是 ArrayAdapter

  • 另请查看数据绑定库和 MVC 设计以获得更清晰的代码。


查看完整回答
反对 回复 2023-10-19
  • 2 回答
  • 0 关注
  • 64 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信