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 设计以获得更清晰的代码。
添加回答
举报