【发布时间】:2019-06-14 21:23:44
【问题描述】:
所以我有我的自定义 ArrayAdapter,其中定义了一个 getView 方法
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
int orderId = getItem(position).getId();
int menuId = getItem(position).getMenuId();
int userId = getItem(position).getUserId();
String status = getItem(position).getStatus();
LayoutInflater inflater = LayoutInflater.from(activity);
convertView = inflater.inflate(resource, parent, false);
TextView idView = convertView.findViewById(R.id.order_id);
TextView nameView = convertView.findViewById(R.id.item_name);
TextView userIdView = convertView.findViewById(R.id.user_id);
TextView statusView = convertView.findViewById(R.id.status_view);
ImageButton cancelButton = convertView.findViewById(R.id.order_canceled);
ImageButton orderDoneButton = convertView.findViewById(R.id.order_done);
cancelButton.setTag(orderId);
orderDoneButton.setTag(orderId);
if(status.equals("done"))
orderDoneButton.setImageResource(android.R.drawable.checkbox_on_background);
else {
orderDoneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
orderRequest.getGenericRequest().setUri("/" + v.getTag() + "?status=done");
orderRequest.put();
// ((ImageButton)v).setImageResource(android.R.drawable.checkbox_on_background);
notifyDataSetChanged();
// TODO cheating but it works
// Intent intent = activity.getIntent();
// intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
// activity.startActivity(intent);
}
});
}
- 我的问题是,当我这样调用它并单击 OrderDoneButton 时,我的列表视图不会自行更新,即使我调用
notifyDataSetChanged()并且我看到数据库已更新,我的问题是为什么? - 第二个问题是在这种方法中,注释掉了“
Intent”,它以我想要的方式工作,但我不确定这是否是一个好方法,有什么建议吗?
【问题讨论】:
-
您需要告诉我们
getItem()是什么以及您的数据在哪里,您可以在您的数据库更新 方法下方的活动或片段中调用notifyDataSetChanged()/跨度> -
@IqbalRizky getItem() 是在 ArrayAdapter 中构建的方法,它允许您从传递给适配器的数组中获取项目。我的数据在数据库中(?)并显示在列表视图中。正如您在代码 sn-p 中看到的,我正在从适配器更新数据库,因此我想在单击列表视图项后从适配器更新我的视图/活动。
标签: android listview android-database