0

I have a listview utilizing a custom adapter, now I want it to show the first five entries and load the others when I scroll down, what's the simplest way to do this?

If my code for the list is

public class Second extends Activity  {

static final String Li_nk="LinkName:";
static final String Image_name="ImageName:";
//ListView list;
public final static String AUTH = "authentication";
static final String KEY_THUMB_URL = "thumb_image";      //Uri.decode("http://zeesms.info/android_app_images/Koala.jpg");
//JSONObject j2;
String wrd;
//ArrayList<HashMap<String,String>> mylist;
@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent i2=getIntent();
     wrd=i2.getStringExtra("entrd");
    Log.v("keyis",wrd);



    final Handler handler = new Handler();
    Runnable runable = new Runnable() {

        @Override
        public void run() {

            //call the function
            LoadData();
            //also call the same runnable
            handler.postDelayed(this, 40000);
        }
    };
    handler.postDelayed(runable, 10);

}public void LoadData(){


     JSONObject j2=JSONfunctions.getJSONfromURL("/webservice_search.php?keyword="+wrd+"&format=json");
     ArrayList<HashMap<String,String>> mylist = new  ArrayList<HashMap<String,String>>();

     try{JSONArray jray=j2.getJSONArray("listings");
        for(int i=0;i<jray.length();i++){
            Log.v("state","json data being read");
            JSONObject j3= jray.getJSONObject(i);
            String first=j3.getString("listing");
            Log.v("sublist", first);
            JSONObject j4=j3.getJSONObject("listing");
            String sec=j4.getString("links");

            int maxLength = (sec.length() < 30)?sec.length():27;
            sec.substring(0, maxLength);
            String cutsec=sec.substring(0,maxLength);
            Log.v("links are",cutsec);
            String img=j4.getString("image_name");
            Log.v("image name is ",img);
            //Uri dimg=Uri.parse("http://zeesms.info/android_app_images/Koala.jpg");
            HashMap<String,String> map=new HashMap<String,String>();

            map.put("Id",String.valueOf(i));
            map.put(Li_nk,cutsec);
            map.put(Image_name,j4.getString("image_name"));

            map.put(KEY_THUMB_URL,"http://zeesms.info/android_app_images/"+img);

             mylist.add(map);

        }

        }
        catch(JSONException e){

            Log.e("loG_tag","Error parsing"+e.toString());
        }
     LazyAdapter adapter = new LazyAdapter(this,mylist);
     adapter.notifyDataSetChanged();
    // list.setSelection(positionToMove);

        ListView list=(ListView)findViewById(R.id.lv1);
         list.setEmptyView(findViewById(R.id.empty));
         list.setAdapter(adapter);

        // list.setStackFromBottom(true);
            list.setItemsCanFocus(false);
           // list.smoothScrollToPosition(3,5);
            list.setOnItemClickListener(new AdapterView.OnItemClickListener(){

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    //Toast.makeText(getApplicationContext(),"Click ListItem Number " + position, Toast.LENGTH_LONG).show();
                    Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.riffre.com/"));
                    startActivity(myIntent);
                }

            });
           list.setOnScrollListener(new OnScrollListener(){

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onScrollStateChanged(AbsListView view,
                    int scrollState) {
                // TODO Auto-generated method stub

            }

           });
}

and the code for the adapter class extending baseadapter is

public class LazyAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader; 


public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
    activity = a;
    data=d;
    Collections.reverse(d);
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    imageLoader=new ImageLoader(activity.getApplicationContext());
}

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

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

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



@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)

        vi = inflater.inflate(R.layout.custom_row_view1, null);

    TextView title = (TextView)vi.findViewById(R.id.linkname); // merchnts name
    TextView artist = (TextView)vi.findViewById(R.id.imagename); // address
    //TextView duration = (TextView)vi.findViewById(R.id); // distance
   ImageView thumb_image=(ImageView)vi.findViewById(R.id.mClogo); // logo

    HashMap<String, String> jsn = new HashMap<String, String>();
    jsn = data.get(position);

    // Setting all values in listview
   title.setText(jsn.get(Second.Li_nk));
   artist.setText(jsn.get(Second.Image_name));
    //duration.setText(song.get(CustomizedListView.KEY_DURATION));
    imageLoader.DisplayImage(jsn.get(Second.KEY_THUMB_URL), thumb_image);
    return vi;
}

}

and I have a different class for parsing the json data in the list. So what would be the simplest way to implement endless scrolling?

Any help would be greatly appreciated...

kleopatra
  • 51,061
  • 28
  • 99
  • 211
Aalok Sharma
  • 1,025
  • 2
  • 12
  • 26
  • possible duplicate of [Android: Implementing Endless List like Android Market](http://stackoverflow.com/questions/4667064/android-implementing-endless-list-like-android-market) – Paresh Mayani Apr 18 '12 at 07:34
  • Well I have my runnable updating the list after an interval as well ,so the code is a bit confusing from these, how should I go about implementing without causing any distortions?? – Aalok Sharma Apr 18 '12 at 08:15

2 Answers2

0

If you load your items from network(so time delay is expected), check this library project : https://github.com/chrisbanes/Android-PullToRefresh

This is an awesome pull-to-refresh listview project, but it also provides pull to refresh from bottom. So you can use that feature to load more items. But this feature need explicit pull action from user.

kingori
  • 2,406
  • 27
  • 30
0

Found the solution by declaring my list as a global variable. Thanks anyway for your help.

Kemal Fadillah
  • 9,760
  • 3
  • 45
  • 63
Aalok Sharma
  • 1,025
  • 2
  • 12
  • 26