Ich habe ein listView, das mit einem benutzerdefinierten Adapter implementiert wird, den ich erstellte, der ein ImageView enthält. Überall auf der Liste kann jedem Gegenstand ein Bild beigefügt sein (oder nicht) (es ist nicht notwendig). Um das Bild in die Bildansicht zu laden, verwende ich Picasso-Bibliothek, in der GetView-Methode.ListView zeigt Bild in Zeilen an, die keine haben sollten
Wenn es um Zeilen geht, denen ein Bild zugeordnet ist, funktioniert mein Code gut. Das Problem ist, wenn die Liste angezeigt wird, Zeilen, die kein Bild haben sollten, zeigen eins an.
Hier ist meine getView() Methode:
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
ReportHolder holder = null;
if(convertView==null){
LayoutInflater inflater=((Activity)context).getLayoutInflater();
convertView = inflater.inflate(layoutResourceId,null);
holder = new ReportHolder();
holder.imageReportView=(ImageView)convertView.findViewById(R.id.reportImage);
holder.reportLocation=(TextView) convertView.findViewById(R.id.report_location);
holder.reportDescription=(TextView) convertView.findViewById(R.id.report_description);
holder.reportStatus=(TextView) convertView.findViewById(R.id.report_status);
convertView.setTag(holder);
}
else
holder=(ReportHolder)convertView.getTag();
ReportData data = reportDataList.get(position);
holder.reportLocation.setText(data.address);
holder.reportDescription.setText(data.description);
holder.reportStatus.setText(data.status);
Picasso picasso = Picasso.with(this.context);
if(data.url!=null)
picasso.load("https://fourth-landing-159416.appspot.com/gcs/"+data.url+"_thumbnail").into(holder.imageReportView);
return convertView;
}
Ich weiß, dass ich meine Informationen auch holen, da keine Informationen zwischen den Zeilen wiederholt sich außer den Bildern. Also was fehlt mir hier?
FMI Mein Adapter ist in einer verschachtelten AsyncTask erstellt, da bin ich die Informationen über eine HTTP-Verbindung holen erforderlich, bevor ich es in den Adapter einsetzen können:
@Override
protected void onPostExecute(final String result) {
mFeedTask = null;
mFeed.removeFooterView(mProgressView);
if(result!=null){
if(result.contains("HTTP error code: 403")){
Toast.makeText(mContext,"Token invalid. Please login again.", Toast.LENGTH_SHORT).show();
}
else if(result.equals("[]"))
Toast.makeText(mContext,"Nothing more to show.", Toast.LENGTH_SHORT).show();
else{
try {
Gson gson = new Gson();
JSONArray reports = new JSONArray(result);
LinkedList<ReportData> tmpList = new LinkedList<ReportData>();
for(int i=0; i < reports.length(); i++){
ReportData data = gson.fromJson(reports.getString(i), ReportData.class);
tmpList.add(data);
}
reportDataList.addAll(tmpList);
if(reportDataList.size()==tmpList.size()){
// First, we set the empty adapter and set up the item click listeners
adapter = new CustomAdapter(mContext,R.layout.custom_feed_row,reportDataList);
mFeed.setAdapter(adapter);
}
else {
updateTriggered=false;
adapter.notifyDataSetChanged();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
Und ich habe eine relativ große Anzahl der zu übertragenden Informationen Ich muss diese Aufgabe mehrmals aufrufen. Beim ersten Aufruf wird der Adapter erstellt und von da an wird notifyDataSetChanged aufgerufen, um den Adapter zu aktualisieren.
Viel Hilfe geschätzt!
Ich danke Ihnen im Voraus! Prost
sind, ist dies, weil Ansichten wiederverwendet Wenn Sie kein Bild für eine Zeile haben, müssen Sie das vorhandene Bild aus der Conversion-Ansicht entfernen, die Sie zuvor festgelegt haben. – maRShmallow