我在列表视图中有ImageButton
个像这样的孩子:
<ImageButton
android:id="@+id/pick_up_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/feed_item_padding_left_right"
android:background="@null"
android:onClick="pickUpDropOff"/>
这样调用pickUpOrDropOff
方法:
public void pickUpDropOff(View view) {
ImageButton buttonToChange = (ImageButton) view.findViewById(R.id.pick_up_button);
if (buttonToChange.getTag(R.bool.PICKED_UP_TAG).toString() == "false") {
buttonToChange.setImageResource(R.drawable.triangle_full);
buttonToChange.setTag(R.bool.PICKED_UP_TAG, "true");
ListItem itemToChange = parent
}
else if (buttonToChange.getTag(R.bool.PICKED_UP_TAG).toString() == "true") {
buttonToChange.setImageResource(R.drawable.triangle_empty);
buttonToChange.setTag(R.bool.PICKED_UP_TAG, "false");
}
// do some other stuff
}
这确实会改变图像资源,但是当视图被回收时,图像资源的更改不会持久,因为我的pickedUp
的POJO属性没有被更改。在这种情况下如何获取POJO以更改属性?
答案 0 :(得分:0)
在更改像这样的pojo数据源之后,只需调用listview适配器中的notifydatasetchanged()
adapter.notifyDataSetChanged();
答案 1 :(得分:0)
我把它整理出来了。
要获取单击按钮的pojo,请在适配器中设置一个标签,其对象位置如下:
pickUpButton.setTag(R.integer.LIST_ITEM_POSITION, position);
然后当点击按钮时,我会像这样改变底层的pojo(我的模型是ShoppingListItem
):
ImageButton buttonToChange = (ImageButton) view.findViewById(R.id.pick_up_button);
if (buttonToChange.getTag(R.bool.PICKED_UP_TAG).toString() == "false") {
buttonToChange.setImageResource(R.drawable.triangle_full);
int myPosition = (Integer) buttonToChange.getTag(R.integer.LIST_ITEM_POSITION);
ShoppingListItem itemToChange = shoppingListItems.get(myPosition);
itemToChange.setPickedUp(true);
}
else if (buttonToChange.getTag(R.bool.PICKED_UP_TAG).toString() == "true") {
buttonToChange.setImageResource(R.drawable.triangle_empty);
int myPosition = (Integer) buttonToChange.getTag(R.integer.LIST_ITEM_POSITION);
ShoppingListItem itemToChange = shoppingListItems.get(myPosition);
itemToChange.setPickedUp(false);
}
listAdapter.notifyDataSetChanged();
这将停止使用回收列表视图的非持久数据的问题。对我来说,这些数据没有本地存储(所有来自于JSON api)。如果您的应用需要,请务必将更改保留在数据库中。