java - Android使用Adapter创建Listview

标签 java android listview adapter

我正在尝试创建一个动态 ListView ,之前在我的 ArticleListFragment 内的 onCreate 方法中使用了它:

    JokeListAdapter jokeAdapter = new JokeListAdapter();
    setListAdapter(jokeAdapter);

这为我创建了一个基于静态项目的 ListView,现在我尝试根据我的 api 项目创建 ListView。

目前我正在运行此命令并获得成功响应,但我的 ListView 中没有收到任何项目,它仍然是空的:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        call = service.jokes();
        call.enqueue(new retrofit2.Callback<Joke>() {
            @Override
            public void onResponse(Call<Joke> call, Response<Joke> response) {
                if(response.isSuccessful()) {
                    List<Joke> jokes = response.body();
                    Log.e(TAG, "response is successful");
                    setListAdapter(new JokeListAdapter(jokes));
                    Log.e(TAG, "response is successful");
                } else {
                    Log.e(TAG, "response is not successful");
                    System.out.println(response.errorBody());
                }
            }

            @Override
            public void onFailure(Call<Joke> call, Throwable t) {
                Log.e(TAG, "response on failure");
            }
        });
}

这是我的适配器构造函数:

private class JokeListAdapter extends BaseAdapter {
    public JokeListAdapter(List<Joke> jokes) {
        Joke.ITEMS = jokes;
    }

最佳答案

这样做,

private JokeListAdapter jokeListAdapter;
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        jokeListAdapter = new JokeListAdapter();
        setListAdapter(jokeListAdapter);
        call = service.jokes();
        call.enqueue(new retrofit2.Callback<Joke>() {
            @Override
            public void onResponse(Call<Joke> call, Response<Joke> response) {
                if(response.isSuccessful()) {
                    List<Joke> jokes = response.body();
                    Log.e(TAG, "response is successful");
                    jokeListAdapter.setValue(jokes);
                    //setListAdapter(new JokeListAdapter(jokes));
                    Log.e(TAG, "response is successful");
                } else {
                    Log.e(TAG, "response is not successful");
                    System.out.println(response.errorBody());
                }
            }

            @Override
            public void onFailure(Call<Joke> call, Throwable t) {
                Log.e(TAG, "response on failure");
            }
        });
}

在 JokeListAdapter.java 中进行这样的更改。

private class JokeListAdapter extends BaseAdapter {
    List<Joke> mJokes = new ArrayList<Joke>(); // use this list for every ever in adapter
    public JokeListAdapter() {

    }
    public void setValue(List<Joke> jokes) {
        mJokes.clear(); // Clearing old items(To add new items only)
        if(jokes != null && jokes.size() > 0) { // We dont need to add if the size is 0
             mJokes.addAll(jokes); // Adding all the item to the list item
        }
        notifyDataSetChanged(); // We are refreshing View the latest with list items.
    }

    @Override
    public int getCount() {
       return mJokes.size();
    }

关于java - Android使用Adapter创建Listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45532518/

相关文章:

java - 如何创建我自己的文件扩展名,如 .odt 或 .doc?

java - 无需正则表达式即可查找整个单词

java - 处理多个主题、发布者和订阅者时出错 + WSO2MB

java - 为什么我无法在 Android 项目中使用 Maven 存储库中的库?如何为此编写正确的pom.xml?

java - Android 复选框 Listview 回收导致意外的框检查

java - 如何在Android中使用List<Object>在ListView中设置数据

java - 使用 Mockito 在 REST Controller 中模拟类

android - 用于编辑联系人的蜂窝同步适配器功能

android - 如何在 Android 应用程序中集成 Google Analytics

android - android中的动态嵌套 ListView