我想知道是否有任何方法可以更新列表视图中单个项目的信息。基本上我按下适配器内部的按钮并发出新请求,请求将设置此返回适配器的值。这是一个“喜欢”的系统。
我不想调用获取列表的异步方法,它需要再次使用。获取数据库中所有项目的代码如下:
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;
}
答案 0 :(得分:1)
您没有显示适配器代码或更新数据库中类似计数的任务,因此我假设您正在使用AsyncTask。在getView
或bindView
函数中,您需要更新它。
@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
的刷新,并使用更新的值呈现您的列表项。