繁体   English   中英

Android使用适配器创建Listview

[英]Android create Listview using Adapter

我正在尝试创建动态列表视图,之前在我的ArticleListFragment内部的onCreate方法中使用了此列表视图:

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

那创建了一个基于静态项目的ListView,现在我试图基于我的api的项目创建ListViews。

目前,我正在以成功的响应运行它,但是我的列表视图中没有任何项目,它仍然为空:

    @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();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM