在 BaseAdapter 中更新 Adapter

Update Adapter within BaseAdapter

当我按下 getView() 方法中定义的 "vote" 按钮时,我正在尝试更新我的适配器,该按钮在扩展 BaseAdapter.[=18= 的 EntertainerAdapter 方法中定义]

所以这是我的例子,首先是我的 EntertainerListActivity 的一个片段,当我使用从 Parse.com:

检索到的一些值设置适配器时
// some code to retrive my objects from Parse.com
for (ParseObject ent : entertainers) {
String name = ent.getString("name");
int vote = ent.getInt("vote");
aList.add(new Entertainer(name, vote));}
EntertainerAdapter adapter = new EntertainerAdapter(EntertainerListActivity.this, aList);
list.setAdapter(adapter);

与我的 EntertainerAdapter 相比,我只是报告 getView() 的简化版本以强调我的问题:

        vote.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            ParseQuery<ParseObject> query = ParseQuery.getQuery("Entertainer");
            query.whereEqualTo("name", name.getText());
            query.whereEqualTo("surname", surname.getText());
            query.getFirstInBackground(new GetCallback<ParseObject>() {
                public void done(ParseObject object, ParseException e) {
                    if (object == null) {
                        Log.d("ZIG", "The getFirst request failed.");
                    } else {
                        object.put("vote", object.getInt("vote") + 1);
                        object.saveInBackground();
                        // OK Now i have to refresh my adapter
                        // I tried
                        notifyDataSetChanged(); // with no results

                        // than intent that start again my Activity
                        //Intent i = new Intent(mActivity, EntertainerListActivity.class);
                        //mActivity.startActivity(i);
                        // This works but i have a big issue when i press back button
                    }
                }
            });
        }
    });

问题是,您正在更新解析中的数据并调用 notifyDataSetChanged();但是您传递给适配器的数据仍然相同,这就是您看不到任何变化的原因。您还应该更新适配器中的数据。

vote.setOnClickListener(new View.OnClickListener()
{
     public void onClick(View v)
     {
          ParseQuery<ParseObject> query = ParseQuery.getQuery("Entertainer");
          query.whereEqualTo("name", name.getText());
          query.whereEqualTo("surname", surname.getText());
          query.getFirstInBackground(new GetCallback<ParseObject>()
          {
              public void done(ParseObject object, ParseException e)
              {
                  if (object == null)
                  {
                       Log.d("ZIG", "The getFirst request failed.");
                  }
                  else
                  {
                        object.put("vote", object.getInt("vote") + 1);
                        object.saveInBackground();

                        // Update the local Entertainer object here
                        // entertainerObject.setVote(entertainerObject.getVote() + 1);
                        notifyDataSetChanged();
                  }
               }
          });
     }
});