0

你好,我有片段,沒有顯示recylerview /卡我有它從數據庫中獲取數據從JSON數據庫解析成數組。這很好,我可以在日誌中看到數組,但片段中沒有顯示任何內容。Recycler在片段查看

我很難過。

FragmentClass:

public class ProductFragment extends Fragment { 

private RecyclerView rvProduct; 
private Singleton singleton; 
private RequestQueue requestQueue; 
private ImageLoader imageLoader; 
public static final String url = "http://10.0.2.2/salesapp/productlist.php"; 
final String TAG = "ProductFragment"; 
final String TAG1 = "JSONRequest ProdFrag"; 
private ArrayList<Product> productList = new ArrayList<>(); 
private ProductAdapter productAdapter; 


public ProductFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    singleton=Singleton.getInstance(); 
    requestQueue = singleton.getRequestQueue(); 
    sendJsonRequest(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view=inflater.inflate(R.layout.fragment_product,container,false); 
    rvProduct = (RecyclerView)view.findViewById(R.id.rvProduct); 
    rvProduct.setHasFixedSize(true); 
    LinearLayoutManager manager = new LinearLayoutManager(getActivity()); 
    rvProduct.setLayoutManager(manager); 
    productAdapter = new ProductAdapter(getActivity()); 
    rvProduct.setAdapter(productAdapter); 
    sendJsonRequest(); 
    return view; 
} 

private void sendJsonRequest(){ 
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, 
      url, 
      null, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        productList = parseJSONResponse(response); 
        productAdapter.setProductList(productList); 
        Log.d(TAG1,productList.toString()); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        if(error!=null){ 
         Log.d(TAG,error.toString());        
        } 
       } 
      } 
    ); 
    requestQueue.add(request); 
} 

private ArrayList<Product> parseJSONResponse(JSONObject response){ 
    ArrayList<Product> productList = new ArrayList<>(); 
    if(response!=null||response.length()>0){ 
     try { 
      JSONArray arrayProducts=response.getJSONArray(KEY_Products); 
      for(int i=0; i<arrayProducts.length(); i++){ 
       JSONObject Product = arrayProducts.getJSONObject(i); 
       String Name=Product.getString(KEY_Name); 
       String Description=Product.getString(KEY_Description); 
       double Retail=Product.getDouble(KEY_RetailPrice); 
       double Wholesale=Product.getDouble(KEY_WholesalePrice); 
       String URL=null; 
       if(Product.has(KEY_URL)) { 
        URL = Product.getString(KEY_URL); 
       }else{ 
        URL = "NA"; 
       } 
       Product product=new Product(); 
       product.setName(Name); 
       product.setDescription(Description); 
       product.setRetailPrice(Retail); 
       product.setWholesalePrice(Wholesale); 
       product.setURL(URL); 
       productList.add(product); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
    return productList; 
} 
} 

適配器:

公共類ProductAdapter擴展RecyclerView.Adapter {

private ArrayList<Product> productList = new ArrayList<>(); 
private LayoutInflater layoutInflater; 
private Singleton singleton; 
private ImageLoader imageLoader; 

public ProductAdapter(Context context){ 
    layoutInflater = LayoutInflater.from(context); 
    singleton=Singleton.getInstance(); 
    imageLoader=singleton.getImageLoader(); 
} 

public void setProductList(ArrayList<Product> productList){ 
    this.productList=productList; 
    notifyItemRangeChanged(0, productList.size()); } 

@Override 
public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = layoutInflater.inflate(R.layout.product_cardview, parent, false); 
    ProductViewHolder productViewHolder = new ProductViewHolder(view); 
    return productViewHolder; 
} 

@Override 
public void onBindViewHolder(final ProductViewHolder holder, int position) { 
    Product product = productList.get(position); 
    holder.tvProductSKU.setText(product.getSKU()); 
    holder.tvProductName.setText(product.getName()); 
    holder.tvProductWholesalePrice.setText(""+product.getWholesalePrice()); 
    holder.tvProductRetailPrice.setText(""+product.getRetailPrice()); 
    String URL=product.getURL(); 
    String fullURL="http//10.0.2.2/salesapp/images/"+URL; 
    if(URL!=null){ 
     imageLoader.get(fullURL, new ImageLoader.ImageListener(){ 
      @Override 
      public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate){ 
       holder.ivProductImage.setImageBitmap(response.getBitmap()); 
      } 
      @Override 
      public void onErrorResponse(VolleyError error){ 

      } 
     }); 
    } 
} 


@Override 
public int getItemCount() { 
    if(productList != null){ 
     return productList.size(); 
    } 
    return 0; 
} 

static class ProductViewHolder extends RecyclerView.ViewHolder{ 
    private ImageView ivProductImage; 
    private TextView tvProductSKU; 
    private TextView tvProductName; 
    private TextView tvProductWholesalePrice; 
    private TextView tvProductRetailPrice; 

    public ProductViewHolder(View itemView) { 
     super(itemView); 
     ivProductImage = (ImageView)itemView.findViewById(R.id.ivProductImage); 
     tvProductSKU = (TextView)itemView.findViewById(R.id.tvProductSKU); 
     tvProductName = (TextView)itemView.findViewById(R.id.tvProductName); 
     tvProductWholesalePrice = (TextView)itemView.findViewById(R.id.tvProductWholesalePrice); 
     tvProductRetailPrice = (TextView)itemView.findViewById(R.id.tvProductRetailPrice); 
    } 
} 
} 
+1

嘗試使用'notifyDataSetChanged()'而不是'notifyItemRangeChanged(0,productList.size());' –

+1

謝謝Pavneet!成功了! – Kurt

回答

0

有在0範圍內沒有商品productList.size()當你第一次調用notifyItemRangeChanged(0, productList.size()) 。所以技術上沒有變更。您應該在此處使用notifyDataSetChanged(),以及數據集完全更改的任何地方。