在 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();
}
}
});
}
});
当我按下 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();
}
}
});
}
});