首页 > 解决方案 > 无法使用 RecyclerView 对 Fragment 进行改造读取数据

问题描述

我尝试从 URL 获取数据并将其传输到Fragment. 该程序可以运行,但结果是什么都没有显示。我认为这是因为我使用recyclerView不正确。我的意思是recyclerView上课很好。但是在fragment课堂上我使用recyclwrView不正确。但我不知道如何解决它。我的控制器类:

public class Controller implements Callback<Source> {
    private static final String BASE_URL = "https://apisss.omt/v2/";
    private ApiInterface apiInterface;
    private MainActivity mainActivity;
    private RecyclerView recyclerView;
    List<Source> sources = new ArrayList<>();

    public Controller(MainActivity mainActivity) {
        this.mainActivity = mainActivity;
    }

    public void start() {
     Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        apiInterface = retrofit.create(ApiInterface.class);
        Call<Source> news = apiInterface.getNews(API_KEY);
        news.enqueue(this);
    }

    @Override
    public void onResponse(Call<Source> call, Response<Source> response) {
        Source source= response.body();
        String sourceName = source.getName();
        Bundle bundle = new Bundle();
        bundle.putString("sourceName", sourceName);
        FragmentManager fm = mainActivity.getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        NameFragment fragmentCurrent = new NameFragment();
        fragmentCurrent.setArguments(bundle);
        ft.add(R.id.fragment, fragmentCurrent);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.addToBackStack(null);
        ft.commit();
    }
........
}

和片段类:

public class NameFragment extends Fragment {
    private List<Source> sources = new ArrayList<>();
    private RecyclerView recyclerView;
    private MainActivity mainActivity;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.name_fragment, container, false);
        recyclerView = view.findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        recyclerView.setAdapter(new NewsAdapter(mainActivity,sources));
        Bundle bundle = this.getArguments();
        if (bundle!=null) {
            bundle.getString("sourceName");

        }
        return view;
    }
}

start()我在课堂上调用MainActivity我的 recyclerView 类的方法:

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsViewHolder> {
    private LayoutInflater inflater;
    private List<Source> sources;
    public NewsAdapter(List<Source> sources) {
        this.sources = sources;
    }

    public NewsAdapter(Context context, List<Source> sources) {
        this.sources = sources;
        this.inflater = LayoutInflater.from(context);
    }


    @NonNull
    @Override
    public NewsAdapter.NewsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.news_item, parent, false);
        return new NewsViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final NewsViewHolder holder, int position) {
        final Source source = sources.get(position);
        holder.sourceName.setText(source.getName());
    }

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

    public static class NewsViewHolder extends RecyclerView.ViewHolder {
        TextView sourceName;

        public NewsViewHolder(View view) {
            super(view);
            sourceName = view.findViewById(R.id.sourceName);
            
        }
    }
}

标签: androidandroid-fragmentsandroid-recyclerviewretrofit

解决方案


推荐阅读