9

devo usare il https://github.com/Diolor/Swipecards e funziona perfetto se i dati è statico, ma non sta funzionando con AsyncTaskNon in grado di impostare SwipeFlingAdapterView da adattatore di serie

Ora voglio legare l'adattatore con i dati JSON. ma non ha funzionato.

public class HomeFragment extends Fragment { 

    private Context context; 

    private ArrayList<Productp> al; 
    private ArrayAdapter<Productp> arrayAdapter; 

    SwipeFlingAdapterView flingContainer; 

    ImageView img_product; 

    private ProgressDialog pDialog; 

    JSONParser jParser = new JSONParser(); 
    private static String url_all_products = "http://www.example.com/prod.php"; 

    // JSON Node names 
    private static final String TAG_SUCCESS = "success"; 
    private static final String TAG_PRODUCTS = "products"; 
    private static final String TAG_IMAGE = "url"; 

    JSONArray products = null; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_home, container, 
       false); 
     context = getActivity(); 

     initUI(rootView); 
     return rootView; 
    } 

    private void initUI(View view) { 

     flingContainer = (SwipeFlingAdapterView) view.findViewById(R.id.frame); 


     new Loaditems().execute(); 


    } 

    class Loaditems extends AsyncTask<String, String, String> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      pDialog = new ProgressDialog(context); 
      pDialog.setMessage("Loading products. Please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 

     } 

     protected String doInBackground(String... args) { 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 

      params.add(new BasicNameValuePair("range", "1")); 

      JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", 
        params); 

      try { 
       // Checking for SUCCESS TAG 
       int success = json.getInt(TAG_SUCCESS); 

       if (success == 1) { 
        products = json.getJSONArray(TAG_PRODUCTS); 

        al = new ArrayList<Productp>(); 

        for (int i = 0; i < products.length(); i++) { 

         JSONObject c = products.getJSONObject(i); 

         Productp pp = new Productp(); 

         pp.portal = c.getString(TAG_IMAGE); 

         al.add(pp); 
        } 
       } else { 

       } 

      } catch (JSONException e) { 
       e.printStackTrace(); 

      } 

      return null; 
     } 

     protected void onPostExecute(String file_url) { 
      pDialog.dismiss(); 

      arrayAdapter = new ProductAdpater(context, al); 
      flingContainer.setAdapter(arrayAdapter); 

     } 
    } 

metodo adattatore:

private class ProductAdpater extends ArrayAdapter<Productp> { 

     Context mContext; 

     public ProductAdpater(Context context, List<Productp> items) { 
      super(context, R.layout.row_homeview, items); 

      try { 
       this.mContext = context; 

      } catch (Exception e) { 

       e.printStackTrace(); 
      } 

     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return al.size(); 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     public View getView(final int position, View convertView, 
       ViewGroup parent) { 

      View view = convertView; 
      ViewHolder holder = null; 

      LayoutInflater mInflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      if (view == null) { 
       view = mInflater.inflate(R.layout.row_homeview, parent, false); 
       holder = new ViewHolder(); 
       holder.imgIcon = (ImageView) view 
         .findViewById(R.id.addviewimage); 

       view.setTag(holder); 
      } else 
       holder = (ViewHolder) view.getTag(); 
      UrlImageViewHelper.setUrlDrawable(holder.imgIcon, 
        al.get(position).portal); 
      return view; 
     } 

     class ViewHolder { 

      ImageView imgIcon; 

     } 

    } 

    } 

classe productp:

public class Productp { 


    public String portal=""; 
} 

quando faccio funzionare il codice di cui sopra. non mostrerà nulla.

Anche questo codice viene eseguito correttamente ma non associa i dati all'adattatore.

Nessun errore mostrato nel logcat.

Ho anche il codice debug.

the execution exit from 

public ProductAdpater(Context mcontext, ArrayList<Productp> items) { 
      super(mcontext, R.layout.row_homeview, items); 

      try { 
       context = mcontext; 
       // this.list = items; 
      } catch (Exception e) { 
       // TODO: handle exception 
       e.printStackTrace(); 
      } 

     } 

E non eseguire il metodo GetView

public View getView(final int position, View convertView, 
      ViewGroup parent) {} 

Come posso risolvere questo?

+0

provare a estendere 'BaseAdapter' una volta invece di' ArrayAdapter' –

+0

provato già. Ma ancora non è in grado di legare i dati. –

+0

Ok. E sei sicuro che l'array 'items' non è vuoto e almeno ha dimensione> 1? –

risposta

5

ho risolto questo.

Ho appena inserito il - arrayAdapter.notifyDataSetChanged(); onPostExecute.

Il mio nuovo codice aggiornato su OnPostExecute:

protected void onPostExecute(String file_url) { 
      pDialog.dismiss(); 

      arrayAdapter = new ProductAdpater(context, al); 
      flingContainer.setAdapter(arrayAdapter); 
      arrayAdapter.notifyDataSetChanged(); 
     } 

E 'fatto.

6

Hai solo bisogno di comunicare i dati aggiornati impostati all'adattatore

utilizzando

notifyDataSetChanged();

notifyDataSetInvalidated()

+0

l'ho già risolto 6 ore fa. –

+0

Sì, va bene, ho appena dato la spiegazione per chiamare notifyDataSetChanged(); notifyDataSetInvalidated() –