Android在listview项目中单击按钮后获取POJO

时间:2014-11-04 02:22:39

标签: java android listview

我在列表视图中有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以更改属性?

2 个答案:

答案 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)。如果您的应用需要,请务必将更改保留在数据库中。