So this is my code for the fragment:
import android.content.Context;
import android.content.Intent;
import android.content.pm.LauncherActivityInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
public class Frag1 extends Fragment {
    CustomViewModel viewModel;
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.frag1_layout, container, false);
            viewModel = new ViewModelProvider(this).get(CustomViewModel.class);
            RecyclerView recyclerView = rootView.findViewById(R.id.rv1);
            final Adapter adapter = new Adapter(new Adapter.Diff());
            recyclerView.setAdapter(adapter);
            recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
            viewModel.show().observe(getViewLifecycleOwner(), rEnts -> {
                adapter.submitList(rEnts);
                Log.d("ItemCount", String.valueOf(adapter.getItemCount()));
            });
        Log.d("ItemCountOUTSIDE", String.valueOf(adapter.getItemCount()));
        return rootView;
    }
when I run the app the recycler view is empty, in the logs the "ItemCountOUTSIDE" shows 0 and is written earlier the "ItemCount" which shows 2. RoomDB is capable of showing the 2 items that are in it when the app is run, so i'd imagine its not a problem with the ViewModel. I was able to output the objects in the DB on a TextView using the same observer function and also using the ViewModel. I understand that apparently observer runs in separate thread and that is executed later but I dont know how to fix that since I know concurrency only on a surface level. Also when doing my research this pattern that I'm using seems to be working for others, hence my frustration.
Additional Code for the Adapter and ViewHolder:
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.w3c.dom.Text;
public class Holder extends RecyclerView.ViewHolder {
    private final TextView textView;
    private Holder(@NonNull View itemView) {
        super(itemView);
        textView = itemView.findViewById(R.id.textName);
    }
    public void bind(rEnt E){
        textView.setText(E.rN);
    }
    static Holder create(ViewGroup parent){
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rv1_item, parent, false);
        return new Holder(view);
    }
}
and
import android.util.Log;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListAdapter;
import androidx.recyclerview.widget.RecyclerView;
import androidx.room.Query;
import java.util.List;
public class Adapter extends ListAdapter<rEnt, Holder> {
    List<rEnt> myList = getCurrentList();
    public Adapter(@NonNull DiffUtil.ItemCallback<rEnt> diffCB){
        super(diffCB);
    }
    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return Holder.create(parent);
    }
    @Override
    public void onBindViewHolder(@NonNull Holder holder, int position) {
        rEnt currentEnt = getItem(position);
        holder.bind(currentEnt);
    }
    static class Diff extends DiffUtil.ItemCallback<rEnt>{ //fuck is this as well???
        @Override
        public boolean areItemsTheSame(@NonNull rEnt oldItem, @NonNull rEnt newItem) {
            return oldItem.getId() == newItem.getId();
        }
        @Override
        public boolean areContentsTheSame(@NonNull rEnt oldItem, @NonNull rEnt newItem) {
            return oldItem.rN.equals(newItem.rN);
        }
    }
}
