ArrayList 中每个对象的删除按钮

我需要从 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

@Override

public 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。抱歉,如果这是一个愚蠢的问题,这是第一个应用程序。



海绵宝宝撒
浏览 123回答 2
2回答

动漫人物

用于interface回调。Activity与Adapter之间的桥接接口;一旦用户在 Adapter 的视图上执行操作 - 给 Activity 回调。界面interface OnItemClickListener {&nbsp; void onItemClick(View view, int position, String name)}活动public class EditActivity extends AppCompatActivity implements&nbsp; &nbsp; OnItemClickListener {&nbsp;...&nbsp;@Override&nbsp;protected void onCreate(Bundle savedInstanceState) {&nbsp;...&nbsp;ReminderListAdapter adapter = new ReminderListAdapter(this, R.layout.reminder_view, ReminderList);&nbsp;adapter.setListener(this);&nbsp;listView.setAdapter(adapter);&nbsp;...&nbsp;}&nbsp;@Override&nbsp; &nbsp;public void onItemClick(final View view, final int position, final String name) {&nbsp; &nbsp; //Your callback&nbsp; &nbsp; delete_Reminder(name);&nbsp; }}适配器public class ReminderListAdapter extends ArrayAdapter<Reminder> {private Context mContext;private int mResource;&nbsp; private final OnItemClickListener listener;&nbsp; public ReminderListAdapter(@NonNull Context context, int resource,&nbsp;&nbsp; @NonNull ArrayList<Reminder> objects) {&nbsp; super(context, resource, objects);&nbsp; mContext = context;&nbsp; mResource = resource;&nbsp; }&nbsp;public setListener(final OnItemClickListener listener) {&nbsp; &nbsp;this.listener = listener;&nbsp;}&nbsp;...&nbsp;@NonNull&nbsp;@Override&nbsp;public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {&nbsp; ...&nbsp; delbtn.setOnClickListener(new View.OnClickListener() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onClick(View v) {&nbsp; &nbsp; &nbsp; listener.onItemClick(convertView, position, name);&nbsp; &nbsp; }&nbsp; });&nbsp; }}

蛊毒传说

您在每次循环迭代时设置适配器,而它应该在循环完成后仅设置一次。我可以在您的代码中看到几个设计问题(如果这是您的应用程序,这是可以理解的。ReminderList 以大写字母开头 - 按照惯例,变量和方法名称以小写字母开头,常量名称全部大写,类名称以大写字母开头我不确定您的应用程序要去哪里,但是当从数据库加载数据时,您可能需要考虑将它们加载到CursorAdapter而不是 ArrayAdapter另请查看数据绑定库和 MVC 设计以获得更清晰的代码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java