我正在尝试使用Android Recycler View显示一些项目的列表。
我在这里和其他地方看到一些人遇到类似的问题,但是我无法通过自己的代码来解决。
实际上,我有另一个可循环使用的视图。这可能很简单,但我看不到。
这是我的代码:
public class ModulesActivity extends AppCompatActivity implements ModuleLineHolder.OnModuleListener {
private static final String TAG = "DEBUG";
RecyclerView mRecyclerView;
ModuleLineAdapter mAdapter;
ArrayList<Card> data;
ArrayList<String> fakeData;
ApiInterface apiService;
ModuleList moduleList;
Card module;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_modules);
mRecyclerView = findViewById(R.id.rvModules);
setupRecycler();
}
private void setupRecycler() {
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
initData();
mAdapter = new ModuleLineAdapter(data, this);
mRecyclerView.setAdapter(mAdapter);
}
private void initData() {
Log.d(TAG, "initData: ");
data = new ArrayList<>();
fakeData = new ArrayList<>();
apiService =
ApiClient.getClient().create(ApiInterface.class);
Call<ModuleList> call = apiService.getModules(
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjMsImlzcyI6Imh0dHA6Ly9kb3NlZXh0cmEuZG9zZXJwLmNvbS5ici9hcGkvYXV0aC9sb2dpbiIsImlhdCI6MTU1MDQ5NjY1NiwiZXhwIjoxNTgxNTk3MDU2LCJuYmYiOjE1NTA0OTY2NTYsImp0aSI6Im13UXpjMGllajdLbmRkQlIifQ.lsmXbEpOhfG0BGhzHwZcSJWXyuWHGHCLI_u5ad4VICY"
);
call.enqueue(new Callback<ModuleList>() {
@Override
public void onResponse(Call<ModuleList> call, Response<ModuleList> response) {
moduleList = response.body();
Log.d(TAG, "onResponse - Call: " + response.body().getCards().get(0).getTitle());
Log.d(TAG, "onResponse - moduleList Size: " + moduleList.getCards().size());
for (int i=0; i < moduleList.getCards().size(); i++) {
data.add(new Card(
response.body().getCards().get(i).getTitle(),
response.body().getCards().get(i).getContent(),
response.body().getCards().get(i).getId(),
response.body().getCards().get(i).getLink()
));
Log.d(TAG, "onResponse - Call: " + response.body().getCards().get(i).getTitle());
}
}
@Override
public void onFailure(Call<ModuleList> call, Throwable t) {
}
});
}
@Override
public void onModuleClick(int position) {
Log.d(TAG, "onModuleClick: clicked " + position);
Toast.makeText(this, "Module: " + module.getId(), Toast.LENGTH_LONG).show();
// Intent intent = new Intent(getContext(), ModulesActivity.class);
// intent.putExtra("id", client.getId());
// startActivity(intent);
}
}
让我知道是否需要更多代码。
答案 0 :(得分:2)
由于initData();
函数执行异步操作,因此需要在适配器完成时通知适配器。因此,基本上,您需要在更新数据列表后调用mAdapter.notifyDataSetChanged()
。