更新适配器上的值

时间:2014-05-13 14:50:24

标签: android parse-platform

我想知道是否有任何方法可以更新列表视图中单个项目的信息。基本上我按下适配器内部的按钮并发出新请求,请求将设置此返回适配器的值。这是一个“喜欢”的系统。

我不想调用获取列表的异步方法,它需要再次使用。获取数据库中所有项目的代码如下:

 protected ArrayList<Feed> doInBackground(MyTaskParams... params) {

        page = params[0].page;
        mFilter = params[0].filter;
        backgroundItems = new ArrayList<Feed>();
        ParseQuery<ParseObject> query = ParseQuery.getQuery("FeedPost");
        ParseObject parseObject;
        try {
            responseList = query.find();
            for (int i = 0; i < responseList.size(); i++) {
                parseObject = responseList.get(i);
                backgroundItems.add(new Feed(parseObject.getObjectId(),
                        parseObject.getString("Title"),
                        parseObject.getString("Description"),
                        parseObject.getString("CompleteText"),
                        parseObject.getString("imageURL"),
                        parseObject.getString("Link_on_Site"),
                        parseObject.getNumber("like_count")));
            }
        } catch (ParseException e) {
            exceptionToBeThrown = e;
        }

        return backgroundItems;
    }

screenshot

2 个答案:

答案 0 :(得分:1)

您没有显示适配器代码或更新数据库中类似计数的任务,因此我假设您正在使用AsyncTask。在getViewbindView函数中,您需要更新它。

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder;
    if (convertView == null)
    {
        //inflate layout and initialize holder
    }
    else
    {
        holder = (ViewHolder)convertView.getTag();
    }

    //get item at position
    MyItem item = getItem(position);
    if (item != null)
    {
        holder.likeButton.setOnClickListener(
            new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    //update database and set new value
                    IncrementLikeCountTask task = new IncrementLikeCountTask()
                    {
                        @Override
                        public void onPostExecute(int newValue)
                        {
                            item.setLikeCount(newValue);
                            notifyDataSetChanged();
                        }
                    }.execute(position);
                }
            }
        );
    }

    return convertView;
}

答案 1 :(得分:0)

所以我假设您在适配器中保留了Feed个对象的列表。

您需要做的是在与服务器通信后修改适配器中相应like_count对象的Feed字段,并在适配器上调用notifyDataSetChanged()

这将触发ListView的刷新,并使用更新的值呈现您的列表项。