android - 无法使用 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);
}
}
}
解决方案
推荐阅读
- python - 如何检查列表的任何元素是否存在于django的arrayfield中?
- java - 如何防止自闭
在 XML 中? - ios - 如何在 ios swift 中创建类似于 gmail 的浮动文本字段?
- wordpress - 从 Apache 或 Wordpress 优雅地提供 MP4
- javascript - 如何创建跟随鼠标的圆圈轨迹?
- html - 为什么在移动设备上点击时会应用悬停样式?
- python - Tensorflow 1.14.0 C API TF_SessionRun 内存泄漏
- java - Eclipse 每次重新启动时都会将 Java 编译器合规性级别重置为 1.7
- javascript - Node 的 log4js 不输出到文件,只输出到控制台
- php - 如何将粗口响应变成对客户请求的响应?