现在我使用setAdapter更新我的ListView,但我认为正确的方法是使用notifiyDatasetChanged(),我不能让它在我的主类(它在适配器中)工作.这是错误:
对于ListAdapter类型,方法notifyDatasetChanged()未定义
我猜这有更好的方法 – 有人能指出我正确的方向吗?
这是我的代码的相关部分:
public class scoreList extends SherlockFragmentActivity {
private ListView listViewscore;
static List<score> listscore = new ArrayList<score>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.score_list);
ctx = this;
listscore = dbh.getAllscores();
listViewscore = (ListView) findViewById(R.id.score_list);
listViewscore.setAdapter(new scoreListAdapter(ctx,R.layout.score_row_item,listscore));
listViewscore.getAdapter().notifyDatasetChanged(); //this is where I get the error
}
}
这是适配器:
public class scoreListAdapter extends ArrayAdapter<score> {
private int resource;
private LayoutInflater inflater;
public scoreListAdapter(Context ctx,int resourceId,List<score> objects) {
super(ctx,resourceId,objects);
resource = resourceId;
inflater = LayoutInflater.from(ctx);
//context = ctx;
}
@Override
public View getView(final int position,View convertView,ViewGroup parent) {
convertView = (LinearLayout) inflater.inflate(resource,null);
score score = getItem(position);
TextView txtName = (TextView) convertView.findViewById(R.id.name);
txtName.setText(score.getName());
TextView txtscoreChange = (TextView) convertView
.findViewById(R.id.scoreChange);
int scoreChange = Integer.parseInt(score.getscoreChange());
if (scoreChange > 0)
txtscoreChange.setText("+" + scoreChange);
else if (scoreChange < 0)
txtscoreChange.setText("" + scoreChange);
else
txtscoreChange.setText("");
TextView txtscoreTotal = (TextView) convertView
.findViewById(R.id.scoreTotal);
txtscoreTotal.setText(score.getscoreTotal());
final LinearLayout currentRow = (LinearLayout) convertView
.findViewById(R.id.scoreRowLayout);
notifyDataSetChanged();
return convertView;
}
}
最佳答案
创建自定义适配器的实例,以便您可以随意使用它…
public class scoreList extends SherlockFragmentActivity {
private ListView listViewscore;
private scoreListAdapter adapter;
static List<score> listscore = new ArrayList<score>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.score_list);
ctx = this;
listscore = dbh.getAllscores();
listViewscore = (ListView) findViewById(R.id.score_list);
adapter = new scoreListAdapter(ctx,listscore);
listViewscore.setAdapter(adapter);
adapter.notifyDatasetChanged();
}
}
顺便说一句,如果您的listscore数组已经加载,那么您不需要使用
adapter.notifyDatasetChanged();