Momentan benutze ich setAdapter, um meine ListView zu aktualisieren, aber ich denke, der richtige Weg ist, notifiyDatasetChanged() zu verwenden, und ich kann das nicht in meiner Hauptklasse (es ist in dem Adapter) arbeiten. Hier ist der Fehler:Wie bekomme ich notifyDatasetChanged() um mit einem ListAdapter zu arbeiten?
Verfahren notifyDatasetChanged() ist nicht definiert für den Typ ListAdapter
Ich vermute, bin es gibt einen besseren Weg, dies zu tun - kann jemand zeigen Sie mir in die richtige Richtung?
Hier ist die relevanten Teile meines Codes:
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
}
}
Hier ist der Adapter:
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;
}
}
Es ist 'notifyDataSetChanged()' - beachten Sie das Großbuchstabe S. Sie haben ein Kleinbuchstabe 's' in der Zeile, die Sie zeigen, hat einen Fehler. – Squonk
Zunächst müssen Sie die Verwendung von notifyDatasetChanged kennen ... Benachrichtigt die angehängten Beobachter, dass die zugrunde liegenden Daten geändert wurden, und jede View, die den Datensatz widerspiegelt, sollte sich selbst aktualisieren. Verstehen Sie dies vor dem Implementieren ... notifyDatasetChanged() wird verwendet, wenn die Daten in Ihren Adapterdaten aktualisiert oder einfach geändert werden. Dies bedeutet, dass die mit dem Adapter verknüpfte Auflistung geändert wird. Keine Notwendigkeit, es in der Schöpfung zu nennen – Pragnani
Danke, habe ich viel Code ausgeschnitten, so dass ich es nicht auf Schaffung anrief, sah es gerade so hier aus. – GrilledCheese