[英]RecyclerView not showing anything in fragment
我正在嘗試使用recyclerView從DB顯示項目列表。 但是,即使代碼運行良好且沒有任何錯誤,recyclerView也不會顯示任何內容。 可能是什么原因? 如果有人可以幫助我的話。
我的代碼如下:
RequestsAdapter.java
package com.bloodconnect.Fragments;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.bloodconnect.Model.Request;
import com.bloodconnect.R;
import java.util.List;
public class RequestsAdapter extends RecyclerView.Adapter<RequestsAdapter.RequestsViewHolder>{
private Context mCtx;
private List<Request> requestList;
public RequestsAdapter(Context mCtx, List<Request> requestList) {
this.mCtx = mCtx;
this.requestList = requestList;
}
@Override
public RequestsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mCtx);
View view = inflater.inflate(R.layout.show_request_template, null);
return new RequestsViewHolder(view);
}
@Override
public void onBindViewHolder(RequestsViewHolder holder, int position) {
Request requests = requestList.get(position);
holder.request_name.setText(requests.getName());
holder.request_blood_group.setText(requests.getBlood_group());
holder.request_date.setText(String.valueOf(requests.getDate_of_request()));
holder.request_address.setText(String.valueOf(requests.getAddress()));
holder.request_lat_lng.setText(String.valueOf(requests.getLat_lng()));
}
@Override
public int getItemCount() {
return requestList.size();
}
class RequestsViewHolder extends RecyclerView.ViewHolder {
TextView request_name, request_address, request_date, request_lat_lng, request_blood_group;
public RequestsViewHolder(View itemView) {
super(itemView);
request_name = itemView.findViewById(R.id.show_request_name);
request_blood_group = itemView.findViewById(R.id.show_request_bloodgroup);
request_date = itemView.findViewById(R.id.show_request_date);
request_address = itemView.findViewById(R.id.show_request_address);
request_lat_lng = itemView.findViewById(R.id.show_request_location);
}
}
}
ShowRequestsFragment.java
package com.bloodconnect.Fragments;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.bloodconnect.R;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
*/
public class ShowRequestsFragment extends Fragment {
private static final String URL_REQUESTS = "http://142.93.216.24/android/api.php?apicall=get_requests";
List<com.bloodconnect.Model.Request> requestsList;
RecyclerView recyclerView;
public ShowRequestsFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_show_requests, container, false);
recyclerView = rootView.findViewById(R.id.listRecyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
//initializing the requestList
requestsList = new ArrayList<>();
loadRequests();
//creating adapter object and setting it to recyclerview
RequestsAdapter adapter;
adapter = new RequestsAdapter(getActivity(), requestsList);
recyclerView.setAdapter(adapter);
return rootView;
}
private void loadRequests() {
/*
* Creating a String Request
* The request type is GET defined by first parameter
* The URL is defined in the second parameter
* Then we have a Response Listener and a Error Listener
* In response listener we will get the JSON response as a String
* */
StringRequest stringRequest = new StringRequest(com.android.volley.Request.Method.GET, URL_REQUESTS,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
//converting the string to json array object
JSONArray array = new JSONArray();
//traversing through all the object
for (int i = 0; i < array.length(); i++) {
//getting product object from json array
JSONObject request = array.getJSONObject(i);
//adding the product to product list
requestsList.add(new com.bloodconnect.Model.Request(
request.getString("name"),
request.getString("blood_group"),
request.getString("date_of_request"),
request.getString("lat_lng"),
request.getString("address")
));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
//adding our stringrequest to queue
Volley.newRequestQueue(getContext()).add(stringRequest);
}
}
我在一個擴展了NavigationDrawerActivity的片段中填充列表。
嘗試在剛好在onResponse
方法中接收到值之后立即設置Adapter
, onResponse
如下所示獲取測試數據:
for (int i = 0; i < array.length(); i++) {
JSONObject request = array.getJSONObject(i);
String name = request.getString("name");
requestsList.add(name)
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
這只是一個例子。 我懷疑:
requestsList.add(new com.bloodconnect.Model.Request(
request.getString("name"),
request.getString("blood_group"),
request.getString("date_of_request"),
request.getString("lat_lng"),
request.getString("address")
));
可能未將數據設置為requestsList
。
但是, 使用GSON
並轉換當前的json輸出是當今的最佳選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.