//reference - http://loopj.com/android-async-http/
https://www.pipiscrew.com/2016/02/android-listview-w-checkboxes-filled-by-sqlite/
JavaScript:
//fragment.java
private ListView lstv;
private Frag_Products_Adapter lstv_adapter;
private List<Frag_Product> Frag_Product_LIST = null;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// init list
Frag_Product_LIST = new ArrayList<Frag_Product>();
lstv = (ListView) getView().findViewById(R.id.frag_lstv);
lstv.setOnItemClickListener(this);
lstv_adapter = new Frag_Products_Adapter(getActivity(), Frag_Product_LIST);
lstv.setAdapter(lstv_adapter);
// EndlessScrollListener
lstv.setOnScrollListener(new EndlessScrollListener());
get_products();
}
private void get_products() {
AsyncHttpClient client = new AsyncHttpClient();
RequestParams clparam = new RequestParams();
clparam.add("x", Dynomite.aid);
client.post(getActivity(), "http://www.x.com/mobile.ashx", clparam, new AsyncHttpResponseHandler() {
@Override
public void onFailure(Throwable t, String error){
General.mes(getActivity(), "Error1 : " + error);
}
@Override
public void onSuccess(String response) {
if (response == null || response.length() < 10)
return;
String resp = response;
JSONArray products = null;
Frag_Product item = null;
try {
products = new JSONArray(resp);
if (products == null || resp.length() < 10)
return;
JSONObject product;
for (int i = 0; i < products.length(); i++) {
item = new Frag_Product();
product = (JSONObject) products.get(i);
item.setId(product.getInt("id"));
item.setDescription(product.getString("description"));
if (product.isNull("subcategory_id"))
item.setSubcategory_id(0);
else
item.setSubcategory_id(product.getInt("subcategory_id"));
Frag_Product_LIST.add(item);
}
} catch (JSONException e) {
General.mes(getActivity(), "Error2 : " + e.getMessage());
} finally {
lstv_adapter.notifyDataSetChanged();
progress.dismiss();
}
}
});
}
public class EndlessScrollListener implements OnScrollListener {
private int visibleThreshold = 5;
private int currentPage = 0;
private int previousTotal = 0;
private boolean loading = true;
public EndlessScrollListener() {
}
public EndlessScrollListener(int visibleThreshold) {
this.visibleThreshold = visibleThreshold;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
currentPage++;
}
}
if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
// I load the next page of gigs using a background task,
// but you can call any function here.
// new LoadGigsTask().execute(currentPage + 1);
loading = true;
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}
//Frag_Product.java
public class Frag_Product {
private int id;
private String description;
private int subcategory_id;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getSubcategory_id() {
return subcategory_id;
}
public void setSubcategory_id(int subcategory_id) {
this.subcategory_id = subcategory_id;
}
}
JavaScript:
//Frag_Products_Adapter.java
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.graphics.Paint;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
public class Frag_Products_Adapter extends BaseAdapter {
Context context;
List<Frag_Product> rowItem;
Frag_Products_Adapter(Context context, List<Frag_Product> rowItem) {
this.context = context;
this.rowItem = rowItem;
}
@Override
public int getCount() {
return rowItem.size();
}
@Override
public Object getItem(int position) {
return rowItem.get(position);
}
@Override
public long getItemId(int position) {
return rowItem.indexOf(getItem(position));
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.frag_lstv_item, null);
}
ViewHolder holder;
holder = new ViewHolder();
holder.product_image = (ImageView) convertView.findViewById(R.id.frag__product_image);
holder.product_description = (TextView) convertView.findViewById(R.id.frag__product_description);
Frag_Product item = rowItem.get(position);
Picasso.with(context).load("http://images.x.com/" + item.getImage_url()).into(holder.product_image);
// sub-category - views are recycled - http://stackoverflow.com/a/6118581/1320686
if (item.getSubcategory_id() > 0) {
holder.product_sub_category.setText(item.getSubcategory_name());
holder.product_sub_category.setVisibility(View.VISIBLE);
} else {
holder.product_sub_category.setVisibility(View.GONE);
}
return convertView;
}
class ViewHolder {
// product
ImageView product_image;
TextView product_description;
TextView product_sub_category;
}
}
https://www.pipiscrew.com/2016/02/android-listview-w-checkboxes-filled-by-sqlite/