我正在尝试创建一个动态 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/