Представление Recycle не показывает элементы, когда я запускаю приложение, но после перехода к другому фрагменту и обратно оно работает - PullRequest
0 голосов
/ 12 апреля 2019

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

Это фрагмент кода

public class Main_fragment extends Fragment {

    TextView titleText;

    ArrayList<String> titles = new ArrayList<>();
    // Access it from anywhere
    static String FoodChoiceVar = "All food"; // Value set for test only. Maybe make an ENUM instead?

    public  Main_fragment() {
        // Needed empty constructor.
    }

    // Don't edit this method as you won't be able tu use "R".
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        titles.add("Breakfast");titles.add("Morning Snack");titles.add("Lunch");titles.add("AfterNoon Snack");titles.add("Dinner"); titles.add("Night Snack");
    }

    //Use this instead.
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.main_fragment, container, false);


        final FragmentActivity c = getActivity();

        titleText = view.findViewById(R.id.textViewFoodType);
        titleText.setText(FoodChoiceVar + "| MENU");


        RecyclerView recyclerView = view.findViewById(R.id.fragmentRecycleView);

        LinearLayoutManager layoutManager = new LinearLayoutManager(c);
        recyclerView.setLayoutManager(layoutManager);
        ViewAdapter adapter = new ViewAdapter(c,titles);
        recyclerView.setHasFixedSize(false);
        recyclerView.setAdapter(adapter);

        return view;
    }

ViewAdapter

public class ViewAdapter extends RecyclerView.Adapter<FoodMenuViewHolder> {


    private LayoutInflater layoutInflater;
    private List<String> titleData;

    public ViewAdapter (Context context,List<String> titleData){
        this.layoutInflater = LayoutInflater.from(context);
        this.titleData = titleData;
    }

    @NonNull
    @Override
    public FoodMenuViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View view = layoutInflater.inflate(R.layout.layout_menu_item,viewGroup,false);

        FoodMenuViewHolder holder = new FoodMenuViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull FoodMenuViewHolder foodMenuViewHolder, int i) {

        String title = titleData.get(i);
        foodMenuViewHolder.titleText.setText(title);

    }

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

Держатель для просмотра

public class FoodMenuViewHolder extends RecyclerView.ViewHolder {


    public TextView titleText;

    public FoodMenuViewHolder(@NonNull View itemView) {
        super(itemView);

        titleText = itemView.findViewById(R.id.ItemText);
    }
}

Я снял 2 коротких видео, чтобы показать, что происходит https://drive.google.com/file/d/17wvlhPUT5R0SN38C2TbgBv_AP8awQUI3/view?usp=sharing https://drive.google.com/file/d/1LJ0Xg4p8Q4a4nyGPSHdVQhBlYOYYi1Pv/view?usp=sharing

1 Ответ

0 голосов
/ 12 апреля 2019

Я думаю, что ваш адаптер теряет себя, поэтому попробуйте получить контекст для разметки макета из viewgroup в onCreateViewHolder.

this:


    public FoodMenuViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new FoodMenuViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_menu_item, viewGroup, false);
    }

И, чтобы избежать ошибки, поставьтеисключение в getItemCount ().

This:


    @Override
    public int getItemCount() {
        if(titleData != null) {
           return titleData.size();
        } else {
           return 0;
        }
    }

И попробуйте использовать контекст вместо Fragment Activity


        final FragmentActivity c = getActivity();

до


        final Context c = getContext();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...