Reputation: 59
How's everyone doing, for the past week I have been trying to figure out what exactly it means to wrap my adapter with the endlessadapter without success. I've tried all my limited knowledge allows, so far I'm loosing the battle. I've read a couple of examples online plus read the endlessadapter instructions, but it did not really help. can someone please shed some light on the meaning of wrapping my adapter.
My list view is as follows:
package com.bopbi.ui;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import com.bopbi.R;
import com.bopbi.model.LocationAdapter;
import com.bopbi.model.LocationList;
import com.bopbi.model.LocationModel;
import com.bopbi.model.PullToRefreshListView.OnRefreshListener;
import com.bopbi.util.RestClient;
import com.bopbi.model.PullToRefreshListView;
import com.bopbi.util.RestClient.RequestMethod;
import com.google.android.maps.GeoPoint;
import com.google.gson.Gson;
import android.app.ActionBar;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
public class ListRest extends ListActivity {
LocationManager lm;
GeoPoint userLocation;
//static String[] TITLE;
//static String[] DESCRIPTION;
ArrayList<LocationModel> locationArray = null;
LocationAdapter locationAdapter;
LocationList list;
//PullToRefreshListView lv;
TextView loadingText;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
// actionBar.show();
// actionBar.setDisplayShowHomeEnabled(true);
setContentView(R.layout.activity_home);
// lv = (PullToRefreshListView) findViewById(R.id.list);
locationArray = new ArrayList<LocationModel>();
locationAdapter = new LocationAdapter(ListRest.this, R.layout.dublet, locationArray);
((PullToRefreshListView) getListView()).onRefresh();
// lv.setTextFilterEnabled(true);
setListAdapter(locationAdapter);
//this.getListView().scrollTo(0,160);
//this.getListView().scrollTo(0,0);
// Set a listener to be invoked when the list should be refreshed.
((PullToRefreshListView) getListView()).setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh() {
// Do work to refresh the list here.
try {
new LocationSync().execute("http://exposezvous.com/list.php");
} catch(Exception e) {}
}
});
try {
new LocationSync().execute("http://exposezvous.com/list.php");
} catch(Exception e) {}
}
private class LocationSync extends AsyncTask<String, Integer, LocationList> {
@Override
protected void onPreExecute() {
}
protected LocationList doInBackground(String... urls) {
LocationList list = null;
int count = urls.length;
for (int i = 0; i < count; i++) {
try {
// ntar diganti service
RestClient client = new RestClient(urls[i]);
try {
client.Execute(RequestMethod.GET);
} catch (Exception e) {
e.printStackTrace();
}
String json = client.getResponse();
list = new Gson().fromJson(json, LocationList.class);
//
} catch(Exception e) {}
}
return list;
}
protected void onProgressUpdate(Integer... progress) {
}
protected void onPostExecute(LocationList loclist) {
// Obtain MotionEvent object
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis() + 100;
float x = 1.0f;
float y = 10.0f;
// List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
int metaState = 0;
MotionEvent motionEvent = MotionEvent.obtain(
downTime,
eventTime,
MotionEvent.ACTION_MOVE,
x,
y,
metaState
);
for(LocationModel lm : loclist.getLocations())
{
locationArray.add(lm);
}
locationAdapter.notifyDataSetChanged();
// Call onRefreshComplete when the list has been refreshed.
((PullToRefreshListView) getListView()).onRefreshComplete();
((PullToRefreshListView) getListView()).onTouchEvent(motionEvent);
((PullToRefreshListView) getListView()).setLastUpdated("Last Updated on Jan 24, 2013 8:27 PM");
}
}
}
My custom Adapter is as follows:
package com.bopbi.model;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bopbi.R;
public class LocationAdapter extends ArrayAdapter<LocationModel> {
int resource;
String response;
Context context;
private LayoutInflater mInflater;
private final ImageDownloader imageDownloader = new ImageDownloader();
public int count;
public LocationAdapter(Context context, int resource,
List<LocationModel> objects) {
super(context, resource, objects);
this.resource = resource;
mInflater = LayoutInflater.from(context);
}
static class ViewHolder {
TextView username;
ImageView image;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
// Get the current location object
LocationModel lm = (LocationModel) getItem(position);
// Inflate the view
if (convertView == null) {
convertView = mInflater.inflate(R.layout.dublet, null);
holder = new ViewHolder();
holder.username = (TextView) convertView
.findViewById(R.id.username);
holder.image = (ImageView) convertView
.findViewById(R.id.profilePic);
// .findViewById(R.id.it_location_description);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.username.setText(lm.getName());
//String url = "http://***********/small_profile_pic_white_bigger.jpg";
ImageDownloader.Mode mode = ImageDownloader.Mode.CORRECT;
imageDownloader.setMode(mode);
imageDownloader.download(lm.getImage(), holder.image);
return convertView;
}
}
Upvotes: 1
Views: 787
Reputation: 3509
If I understand you correctly, you're attempting to use the EndlessAdapter with your LocationAdapter.
The documentation for Commonsware's EndlessAdapter mentions that one of the constructors offered by EndlessAdapter takes an existing ListAdapter as its parameter. Wrapping your adapter involves passing your LocationAdapter to a subclass of EndlessAdapter as a parameter.
private class EndlessLocationAdapter extends EndlessAdapter
{
public EndlessLocationAdapter(LocationAdapter adapter)
{
super(adapter);
}
@Override
protected boolean cacheInBackground() throws Exception
{
//Fetch more data
}
//Other methods such as getPendingView(), appendCachedData()
}
In your activity
locationArray = new ArrayList<LocationModel>();
LocationAdapter locationAdapter = new LocationAdapter(ListRest.this, R.layout.dublet, locationArray);
EndlessLocationAdapter endlessLocAdapter = new EndlessLocationAdapter(locationAdapter);
setListAdapter(endlessLocAdapter);
Upvotes: 3