Diese Frage wurde ein paar Mal gestellt, aber diese Antworten gelten nicht für mich. Ich möchte eine allgemeinere Antwort darüber, was dieses Problem im Allgemeinen verursacht.RecyclerView zeigt keine Elemente bis zum Scrollen
Ich habe eine Recyclerview in meinem Aktivitätslayout. Zeilen des recyclerview ist ein Constraint-Layout mit einer Bildansicht und Textview:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="50dp"
android:clickable="true">
<ImageView
android:id="@+id/file_icon"
android:layout_width="50dp"
android:layout_height="50dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:text="File"
android:id="@+id/file_name"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintLeft_toRightOf="@+id/file_icon"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
</android.support.constraint.ConstraintLayout>
ich mehr Elemente habe in dieser Zeilenstruktur zu zeigen. Ich habe den Adapter richtig eingerichtet. Wenn ich meine Anwendung ausführe, werden Textansichten, die auf dem Bildschirm angezeigt werden, jedoch nicht angezeigt, bis ich wieder scrolle und zurückscrolle. Damit diese Textansichten angezeigt werden können, müssen sie im Grunde aus der Anzeige entfernt und erneut eingegeben werden. Hier ist mein Adapter-Code:
public class FileViewAdapter extends RecyclerView.Adapter<FileViewAdapter.Viewholder> {
private Context context;
private List<File> files;
public FileViewAdapter(Context context, List<File> files) {
this.context = context;
this.files = files;
}
public FileViewAdapter(Context context){
this.context = context;
}
@Override
public Viewholder onCreateViewHolder(ViewGroup viewGroup, int i) {
LayoutInflater inflater = LayoutInflater.from(context);
View layout = inflater.inflate(R.layout.file_list_item, viewGroup, false);
return new Viewholder(layout);
}
@Override
public void onBindViewHolder(Viewholder viewholder, int i) {
File file = files.get(i);
if (file.isDirectory()) {
viewholder.fileIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.ic_folder_black_24dp));
viewholder.wholeThing.setOnClickListener(null);
} else {
viewholder.fileIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.ic_insert_drive_file_black_24dp));
viewholder.wholeThing.setOnClickListener(null);
}
viewholder.fileName.setText(file.getName());
}
@Override
public int getItemCount() {
return files.size();
}
public void clear() {
files.clear();
notifyDataSetChanged();
}
public void addAll(List<File> newFiles) {
files.addAll(newFiles);
notifyDataSetChanged();
}
class Viewholder extends RecyclerView.ViewHolder {
View wholeThing;
ImageView fileIcon;
TextView fileName;
public Viewholder(View itemView) {
super(itemView);
wholeThing = itemView;
fileIcon = (ImageView) itemView.findViewById(R.id.file_icon);
fileName = (TextView) itemView.findViewById(R.id.file_name);
}
}
}
EDIT: Wie ich den Konstruktor von Adapter auf Aktivität aufrufen.
Add wo Sie Ihren Adapter –
android nennen: layout_width = "0DP" android: layout_height = "0DP" Warum ist Ihre Breite und Höhe für Textview 0DP? –
@EkundayoBlessingFunminiyi Es ist ConstraintLayout. Wenn Sie die Breite oder Höhe auf 0dp festlegen, wird es sich bis zu der horizontalen oder vertikalen Beschränkung erstrecken. – Bora