0

안녕하세요, 제가 recylerview/카드를 표시하지 않습니다. 배열로 구문 분석되는 JSON의 MySQL 데이터베이스에서 데이터를 가져 왔습니다. 그게 잘 작동 내가 로그에서 배열을 볼 수 있지만 아무것도 조각에 표시되고 있습니다.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

'notifyItemRangeChanged (0, productList.size()); 대신'notifyDataSetChanged()'를 사용 해보세요. –

+1

고마워요. Pavneet! 일했다! – Kurt

답변

0

productList.size() 먼저 전화 notifyItemRangeChanged(0, productList.size())-0의 범위에 항목이 없습니다 . 그래서 기술적으로는 으로 변경되는 항목이 없습니다. 여기서 데이터 세트가 완전히 변경되면 notifyDataSetChanged()을 사용해야합니다.

관련 문제