亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號