RecyclerView не отображается вообще. Я не могу найти ошибку. Как я могу это исправить? - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь построить свой просмотрщик в несколько фрагментов, используя ViewPageAdapter. Я довольно новичок в Android Studio, и я не знаю, как справиться с ошибкой, которую я получаю. У меня не отображается окно реселлера, и во время работы единственная проблема, с которой я, похоже, сталкиваюсь, - это проблема типа «пропуск кадров». Обычно это меньше 100 кадров (а мой эмулятор работает медленно, поэтому я не знаю, действительно ли приложение отнимает столько времени).

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

Примечание. У меня не было времени для создания новых классов фрагментов для ViewPageAdapter. В настоящее время существует только один класс фрагментов, но я намерен на ViewPager иметь несколько фрагментов, представленных в виде нескольких страниц. (Кроме того, я не хочу делиться общей идеей, лежащей в основе проекта моей команды. Я хотел бы сохранить это слегка анонимным, но если вы считаете необходимым понять, в чем заключается основная идея проекта, я определенно могу отправить сообщение для дополнительные сведения.)

Фрагмент, в котором я установил адаптер RecyclerView


import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class Fragment_new extends Fragment {

    View v;
    private RecyclerView myRecyclerView;
    private List<new_prescription> list_prescriptions;

    public View onCreateNewView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.new_fragment, container, false);
        myRecyclerView = v.findViewById(R.id.recyclerview_obj);
        recyclerViewAdapter recycleAdapter = new recyclerViewAdapter(getContext(), list_prescriptions);
        myRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        myRecyclerView.setAdapter(recycleAdapter);
        return v;

    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        list_prescriptions = new ArrayList<>();
        list_prescriptions.add(new new_prescription("Some Medication #1", "6:30-9:30", 5));
        list_prescriptions.add(new new_prescription("Some Medication #2", "1:30-4:30", 5));
    }
}

ViewPageAdapter для создания представлений для различных фрагментов


import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;

import java.util.ArrayList;
import java.util.List;

public class ViewPageAdapter extends FragmentPagerAdapter {


    private final List<Fragment> pager_list = new ArrayList<>();
    private final List<String>   string_List = new ArrayList<>();

    public ViewPageAdapter(FragmentManager manager) {
        super(manager);

    }

    @Override
    public Fragment getItem(int position) {
        return pager_list.get(position);
    }

    @Override
    public int getCount() {
        return string_List.size();
    }

    public CharSequence elementString(int position) {
        return string_List.get(position);
    }

    public void addFragment(Fragment fragment, String title) {
        pager_list.add(fragment);
        string_List.add(title);

    }


}

Обычный адаптер RecyclerViewAdapter для моего RecyclerView


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class recyclerViewAdapter extends RecyclerView.Adapter<recyclerViewAdapter.MyViewHolder> {

    Context data;
    List<new_prescription> new_list;

    public recyclerViewAdapter(Context data, List<new_prescription> new_list) {
        this.data = data;
        this.new_list = new_list;
    }

    public recyclerViewAdapter() {
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(data).inflate(R.layout.new_fragment_items, parent, false);
        MyViewHolder view = new MyViewHolder(v);
        return view;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

        holder.new_name.setText(new_list.get(position).getName());
        holder.new_quantity.setText(new_list.get(position).getTime());

    }

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

    public static class MyViewHolder extends RecyclerView.ViewHolder {

        private TextView new_name;
        private TextView new_quantity;
        private ImageView new_image;
        private TextView  new_time;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            new_name = itemView.findViewById(R.id.prescription_name);
            new_image = itemView.findViewById(R.id.new_image);
            new_quantity = itemView.findViewById(R.id.quantity_items);
            new_time = itemView.findViewById(R.id.new_time);

        }

    }
    }

Основной класс активности


import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

import com.google.android.material.tabs.TabLayout;

public class Main_Activity_Frags extends AppCompatActivity {

   private TabLayout layout;
   private ViewPager viewpager;
   private ViewPageAdapter adapter;


   public Main_Activity_Frags() {
   }

   @Override
   protected void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main_2);

       layout = findViewById(R.id.tab_layout_id);
       viewpager = findViewById(R.id.viewpager_id);
       adapter = new ViewPageAdapter(getSupportFragmentManager());


       adapter.addFragment(new Fragment_new(),"Prescriptions For Today");
       adapter.addFragment(new Secondary_Fragment(),"Quantity");
       adapter.addFragment(new Fragment_final(), "Time");


       viewpager.setAdapter(adapter);
       layout.setupWithViewPager(viewpager);
       layout.getTabAt(0).setIcon(R.drawable.baseline_today_black_18dp);
       layout.getTabAt(1).setIcon(R.drawable.baseline_history_black_18dp);


   }



}

Это класс, который я использую для создания экземпляров объектов new_prescription, которые добавляются в массив RecyclerView Arraylist.

public class new_prescription {

    private String Name;
    private String Time;
    private int Frequency;

    public new_prescription() {
    }

    public new_prescription(String name, String time, int frequency) {
        Name = name;
        Time = time;
        Frequency = frequency;
    }

    public String getTime() {
        return Time;
    }

    public String getName() {
        return Name;
    }

    public int getFrequency() {
        return Frequency;
    }
}

1 Ответ

0 голосов
/ 11 февраля 2020

Я думаю, что это работает, попробуйте это:

public class Fragment_new extends Fragment {

            private RecyclerView myRecyclerView;
            private List<new_prescription> list_prescriptions;


            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                v = inflater.inflate(R.layout.new_fragment, container, false);
                myRecyclerView = v.findViewById(R.id.recyclerview_obj);
                list_prescriptions = new ArrayList<>();
                list_prescriptions.add(new new_prescription("Some Medication #1", "6:30-9:30", 5));
                list_prescriptions.add(new new_prescription("Some Medication #2", "1:30-4:30", 5));

                recyclerViewAdapter recycleAdapter = new recyclerViewAdapter(getContext(), list_prescriptions);
                myRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
                myRecyclerView.setAdapter(recycleAdapter);
                return v;

            }


        }
...