【问题标题】:RecyclerView is not showing up at all. I cannot find the error. How do I fix this?RecyclerView 根本没有出现。我找不到错误。我该如何解决?
【发布时间】:2020-02-11 03:17:44
【问题描述】:

我正在尝试使用 ViewPageAdapter 将我的 recyclerview 构建为多个片段。我对 Android Studio 很陌生,我不知道如何处理我遇到的错误。我的 recyclerview 没有出现,并且在运行时,我似乎遇到的唯一问题是“跳帧”类型的问题。这通常少于 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);

    }


}

我的 RecyclerView 的普通 RecyclerViewAdapter


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);


   }



}

这是我用来实例化添加到 RecyclerView Arraylist 的 new_prescription 对象的类。

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;
    }
}

【问题讨论】:

    标签: java android android-fragments android-recyclerview android-viewpager


    【解决方案1】:

    我觉得可行,试试这个:

    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;
    
                }
    
    
            }
    

    【讨论】:

    • 它不工作。我在跑步时得到这个。 “跳过了 115 帧!应用程序可能在其主线程上做了太多工作。”
    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 2015-01-06
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2019-10-05
    • 2023-01-23
    相关资源
    最近更新 更多