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);
}
});
}
}

TA貢獻1895條經驗 獲得超3個贊
您在每次循環迭代時設置適配器,而它應該在循環完成后僅設置一次。
我可以在您的代碼中看到幾個設計問題(如果這是您的應用程序,這是可以理解的。
ReminderList 以大寫字母開頭 - 按照慣例,變量和方法名稱以小寫字母開頭,常量名稱全部大寫,類名稱以大寫字母開頭
我不確定您的應用程序要去哪里,但是當從數據庫加載數據時,您可能需要考慮將它們加載到CursorAdapter而不是 ArrayAdapter
另請查看數據綁定庫和 MVC 設計以獲得更清晰的代碼。
添加回答
舉報