RecyclerView(适配器)什么也没显示

时间:2019-02-18 16:26:56

标签: android android-recyclerview

我正在尝试使用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);
    }
}

让我知道是否需要更多代码。

1 个答案:

答案 0 :(得分:2)

由于initData();函数执行异步操作,因此需要在适配器完成时通知适配器。因此,基本上,您需要在更新数据列表后调用mAdapter.notifyDataSetChanged()