В представлении Recycler не отображаются виды при заданном цвете фона - PullRequest
0 голосов
/ 21 декабря 2018

Привет, я новичок в Android Studio, и я пытаюсь сделать простое представление переработчика, которое содержит представление списка карт.Код работает просто отлично, и каждый вид отображается нормально, когда я его запускаю, но потом я решил добавить цвет фона в представление переработчика, чем все просто пошло не так.Единственное, что я изменил, - это установил цвет фона для вида переработчика.Кстати, мой вид рециркулятора живет фрагментом.

Вот как это выглядело до того, как я установил цвет фона: enter image description here

XML-файл дляпредставление переработчика до изменения:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:listitem="@layout/recycler_view_item" />

</android.support.constraint.ConstraintLayout>

И вот как это выглядит сейчас, все, что я сделал, это установил цвет фона представления переработчика: enter image description here

Вот новый XML-файл:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_green_dark"
        tools:listitem="@layout/recycler_view_item" />

</android.support.constraint.ConstraintLayout>

Я предполагаю, что цвет фона как-то покрывает мои взгляды?Кстати, я замечаю, что в logcat произошла ошибка:

2018-12-21 22:02:05.515 20644-20644/com.steven97102gmail.todoassistant E/RecyclerView: No adapter attached; skipping layout

Однако эта ошибка возникает, даже если я не устанавливаю фон, и она работает нормально.

Вот мой класс для фрагмента:

public class RecycleFragment extends Fragment {
    private RecyclerView recyclerView;
    private RecyclerView.Adapter viewAdapter;
    private RecyclerView.LayoutManager viewLayouManager;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.recyler_view, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        // get and configure the recycle view
        recyclerView = (RecyclerView) getActivity().findViewById(R.id.recycler_view);
        recyclerView.setHasFixedSize(true);
        // layout manager for recyler view
        viewLayouManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(viewLayouManager);
        // creates the initial cards
        ArrayList<CardItem> card_lists = new ArrayList<>();
        for (int i = 0;i<=10;i++){
            CardItem card = new CardItem("TODO"+i,"12/" + i);
            card_lists.add(card);
        }
        // adapter for recycler view, initialize the recycler view
        viewAdapter = new RecyclerAdapter(card_lists);
        recyclerView.setAdapter(viewAdapter);
        // test add a new item
        card_lists.add(0,new CardItem("Test Insert","12/16"));
        viewAdapter.notifyItemInserted(0);
    }
}

Вот мой класс для адаптера представления переработчика:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {
   private ArrayList<CardItem> card_item_list;

   // view holder is created from the recycler_card_item template
   public static class RecyclerViewHolder extends RecyclerView.ViewHolder {
       public TextView title_tv, date_tv;
       public RecyclerViewHolder(LinearLayout layout) {
            super(layout);
            title_tv = layout.findViewById(R.id.card_item_title);
            date_tv = layout.findViewById(R.id.card_item_date);
       }
   }

   // take in a list of card items to initialize with
   public RecyclerAdapter(ArrayList<CardItem> card_list) {
        card_item_list = card_list;
   }

    @NonNull
    @Override
    // inflate and creates a viewholder objects, which is from the recycler care item template;
    public RecyclerAdapter.RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
       // create a new card item
        LinearLayout cardLayout = (LinearLayout) LayoutInflater.from(viewGroup.getContext())
                    .inflate(R.layout.recycler_card_item, viewGroup, false);
        RecyclerViewHolder vh = new RecyclerViewHolder(cardLayout);
        return vh;
    }

    @Override
    // bind the CardItem class with the viewholder to complete the card
    public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {
       CardItem target_card = card_item_list.get(position);
       holder.title_tv.setText(target_card.title);
       holder.date_tv.setText(target_card.date);
    }

    @Override
    public int getItemCount() {
        return card_item_list.size();
    }
}

1 Ответ

0 голосов
/ 21 декабря 2018

В вашем коде вы пытаетесь получить представление о переработчике на уровне активности:

recyclerView = (RecyclerView) getActivity().findViewById(R.id.recycler_view);

, но представление о переработчике находится в вашем фрагменте.Странно, что у вас нет других ошибок, я ожидал, что приложение вылетит.В любом случае, это должно быть решено следующим образом: измените свой onCreateView следующим образом

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.recyler_view, container, false);
    recyclerView = root.findViewById(R.id.recycler_view);
    return root;
} 

предыдущая строка, та, которая извлекла обзор переработчика из действия, больше не нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...