Also wollte ich Elemente aus meiner Listview anpassen und ich habe einen benutzerdefinierten Adapter.Elemente zeigt nicht mit benutzerdefinierten Adapter für ListView
public class elementList extends BaseAdapter {
Context context;
String[] data;
private static LayoutInflater inflater = null;
public elementList(Context context, String[] data) {
this.context = context;
this.data = data;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return data.length;
}
@Override
public Object getItem(int position) {
return data[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if(vi == null)
vi = inflater.inflate(R.layout.task, null);
TextView text = (TextView)vi.findViewById(R.id.title);
Log.d("TAG", "DA");
text.setText(data[position]);
return vi;
}
}
Hier ist meine Haupttätigkeit
private void showTasks(){
final ArrayList<String> taskList = new ArrayList<String>();
ListView listView = (ListView)findViewById(R.id.listView);
final List<String> tasks = new ArrayList<String>(taskList);
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, tasks);
final elementList element = new elementList(this, tasks.toArray(new String[0]));
listView.setAdapter(element);
FirebaseAuth mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference adress = database.getReference("users/" + user.getUid() + "/tasksList");
adress.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
try{
if(dataSnapshot.getValue() != null){
Map<String, String> value = (Map<String, String>)dataSnapshot.getValue();
for (Map.Entry<String, String> entry : value.entrySet()){
tasks.add(entry.getValue());
Log.d("VALOARE", entry.getValue());
element.notifyDataSetChanged();
}
}
}
catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
Ich verstehe nicht, warum es nicht meine Liste nicht angezeigt, wenn ich meinen Adapter verwende (Element), aber es funktioniert gut, wenn ich Arrayadapter.
Im ersten Bild, das ich arrayadapter und in dem zweiten Elemente verwenden. Ich möchte erwähnen, dass es nicht abstürzt oder irgendeinen Fehler gibt.
Ich finde das 'statische' Layout inflator verdächtig. Überprüfen Sie auch https://possiblemobile.com/2013/05/layout-inflation-as-intended/, wie Sie die Elternansicht an die Methode "inflate" übergeben können. – frozenkoi
Das Array, das den 'ElementList'' Adapter unterstützt, wird nie geändert/aktualisiert. Sie erstellen einmal eine Array-Kopie der 'tasks'' List', wenn sie leer ist, aber ändern Sie das Array danach nie. Das Aktualisieren dieser 'Liste' wird nichts mit diesem Array tun. Warum nehmen Sie Ihren benutzerdefinierten 'Adapter' nicht stattdessen zu einer' Liste', damit Sie ihn genauso aktualisieren können wie den 'ArrayAdapter'? –
Teilen Sie Ihr task.xml-Layout –