我正在做练习,我必须通过Volley库从服务器获取JSONArray对象。然后使用该数据填充listView。我已经做到了,但我认为必须有更好的方法。我能够使它工作的唯一方法是在我发送给齐射的JSONArrayRequest的onResponse方法中设置适配器。
是否可以在片段的onCreateView方法中设置适配器?
这是我的代码:
import requests
import json
url = 'http://stats.nba.com/stats/shotchartdetail?PlayerID=2544&TeamID=0&VsConference=&Location=&SeasonType=Regular+Season&RookieYear=&Season=2015-16&DateFrom=&ClutchTime=&GameID=&OpponentTeamID=0&DateTo=&GameSegment=&AheadBehind=&LastNGames=0&VsDivision=&LeagueID=&Position=&Outcome=&ContextMeasure=FGM&SeasonSegment=&Period=0&Month=0'
r = requests.get(url)
data = json.loads(r.text)
答案 0 :(得分:0)
是的,我将我的适配器设置为我当前项目中片段的onCreateView中的ExpandableListView。你应该没有问题。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View parentThis = (LinearLayout)inflater.inflate(R.layout.tab_exlv, container, false);
exlvTabHistory = (ExpandableListView)parentThis.findViewById(R.id.exlvTabHistory);
exlvTabHistory.setAdapter(setupEXLVAdapter());
}
答案 1 :(得分:0)
是的,还有更好的方法。创建对适配器的引用作为Fragment的成员变量,这允许您在数据进入后调用notifyDataSetChanged()
。
有一点需要注意,您无法更改数据源的引用,即users
列表。因此,当数据进入时,使用addAll()
添加数据而不重新分配数据源引用。
您的代码应该是这样的:
public class UserListFragment extends Fragment {
private static final String USERS_URL = "https://raw.githubusercontent.com/users.json";
public static final String TAG = UserListFragment.class.getSimpleName();
private ListView listView;
private VolleyManager volleyManager;
private List<User> users;
UsersAdapter adapter; //added
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_user_list, null);
listView = (ListView) view.findViewById(R.id.list_view);
//added:
adapter = new UsersAdapter(getActivity(), R.layout.list_item, users);
listView.setAdapter(adapter);
Button obtain_data_btn = (Button) view.findViewById(R.id.user_list_obtain_btn);
obtain_data_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getUsersListData();
}
});
return view;
}
private void getUsersListData() {
JsonArrayRequest jsonArrayRqst = new JsonArrayRequest(
USERS_URL,
new Response.Listener<JSONArray>(){
@Override
public void onResponse(JSONArray response) {
//modified:
users.addAll(parseUserList(response.toString()));
adapter.notifyDataSetChanged();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, error.getMessage());
}
}
);
volleyManager = VolleyManager.getInstance(getActivity());
volleyManager.addToRequestQueue(jsonArrayRqst);
}
//.........