Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更新适配器上的值_Android_Parse Platform - Fatal编程技术网

Android 更新适配器上的值

Android 更新适配器上的值,android,parse-platform,Android,Parse Platform,我想知道是否有任何方法可以更新listview中单个项目的信息。基本上,我按下适配器内的按钮,它会发出一个新的请求,该请求将设置为返回适配器的值。这是一个“喜欢”的系统 我不想调用获取列表的异步方法,这需要很多时间。获取数据库中所有项目的代码如下: protected ArrayList<Feed> doInBackground(MyTaskParams... params) { page = params[0].page; mFilter = p

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

我不想调用获取列表的异步方法,这需要很多时间。获取数据库中所有项目的代码如下:

 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:)之前,您需要更改数据集