Android 更新适配器上的值
我想知道是否有任何方法可以更新listview中单个项目的信息。基本上,我按下适配器内的按钮,它会发出一个新的请求,该请求将设置为返回适配器的值。这是一个“喜欢”的系统 我不想调用获取列表的异步方法,这需要很多时间。获取数据库中所有项目的代码如下:Android 更新适配器上的值,android,parse-platform,Android,Parse Platform,我想知道是否有任何方法可以更新listview中单个项目的信息。基本上,我按下适配器内的按钮,它会发出一个新的请求,该请求将设置为返回适配器的值。这是一个“喜欢”的系统 我不想调用获取列表的异步方法,这需要很多时间。获取数据库中所有项目的代码如下: protected ArrayList<Feed> doInBackground(MyTaskParams... params) { page = params[0].page; mFilter = p
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;
}
受保护的ArrayList doInBackground(MyTaskParams…params){
page=params[0]。第页;
mFilter=params[0]。过滤器;
backgroundItems=新的ArrayList();
ParseQuery=ParseQuery.getQuery(“FeedPost”);
ParseObject-ParseObject;
试一试{
responseList=query.find();
对于(int i=0;i
您没有显示适配器代码或更新数据库中like计数的任务,因此我假设您使用的是异步任务。在
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;
}
因此,我假设您正在适配器中持久化
Feed
对象列表
您需要做的是,在与服务器通信后,修改适配器中相应的Feed
对象的like\u count
字段,并在适配器上调用notifyDataSetChanged()
这将触发列表视图的刷新,并用更新后的值呈现列表项。完整的代码在这里:它没有mViewHolder.mLike.setOnClick。。。。。。因为它没有在github上提交,我现在正在工作。没关系,您可以使用我的代码,只需填写变量名。重要的是重写更新数据库中like计数的
AsyncTask
,并在onPostExecute
方法中更新UI上的计数。奇怪的是,我单击按钮时没有更新适配器中的值。”我调用了NotifyDataSetValidated和notifyDataSetChanged,没有任何更改。返回的值通常只是没有显示更新。代码在这里:如果您要使用notifydatasetchange
,那么我已经修改了我的答案。在调用notifyDataSetChanged:)之前,您需要更改数据集