CategoryHow To

Android Tutorial: Implementing a Drag and Sort ListView with a Database

I’m working on an app and got to the point where I wanted to implement a drag and drop ListView that allows re-ordering, adding and deleting of list items using a database. I didn’t think that it would be all that difficult. However, with my limited experience with Android, it turned out to be a bit of a pain to get working. But, now that I have it working I figured I’d post some example code so that others can take advantage of what I learned and hopefully have an easier time getting this implemented.

My initial searches had me stumble upon DragSortListView (DSLV) by Carl A. Bauer. I was excited to find something that looked so polished, and it appeared pretty easy to implement. After digging into the demo code (available from above link) and playing with the demo app (available as app on Google Play), I thought I had a pretty good idea of what I needed to do to get it working. Unfortunately, I just couldn’t get it to work with a database. I could get the items to display correctly and then I could drag them around to re-arrange the order and swipe to delete them, but I couldn’t figure out how to save any of that in the database.

As part of my trials, I posted what I thought was an issue on the DSLV GitHub site. Turns out that it’s not an issue, just a misunderstanding on my part. But, through the discussion of that issue I figured out how to get it to work. YEAH!

The SimpleDragSortCursor adapter class provides most of the muscle to get things up and running. The difficult part was to get it to correctly update the database. Read on to find out how I got it working.

To get started, I based my test app on the class from the DSLV demo. I already had a database class that I was using (, so I modified it a little for this test app (it’s available in the demo code you can download on GitHub). Next, I ended up creating my own method to setup the ListView and configure click and long-click actions. Here’s what I put together:

private void displayItemList() {
	// The desired columns to be bound
	String[] columns = new String[] { DatabaseAdapter.ITEM_NAME,
			DatabaseAdapter.ITEM_POSITION };

	// the XML defined views which the data will be bound to
	int[] ids = new int[] {, };

	// pull all items from database
	Cursor cursor = mDbHelper.getAllItemRecords();

	mMAdapter = new MAdapter(this, R.layout.list_items, null, columns, ids,

	mDslv = (DragSortListView) findViewById(;

	// set dslv profile for faster scroll speeds


	mDslv.setOnItemClickListener(new OnItemClickListener() {
		public void onItemClick(AdapterView<?> listView, View view,
				int position, long id) {
			// Get the cursor, positioned to the corresponding row in the
			// result set
			Cursor cursor = (Cursor) listView.getItemAtPosition(position);

			// Get the item name and details from this row in the database.
			String itemName = cursor.getString(cursor
			String itemDetails = cursor.getString(cursor
					itemName + ": " + itemDetails, Toast.LENGTH_SHORT)

	mDslv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
		public boolean onItemLongClick(AdapterView<?> listView, View view,
				int position, long id) {
			// Get the cursor, positioned to the corresponding row in the
			// result set
			Cursor cursor = (Cursor) listView.getItemAtPosition(position);

			// Get the item name and details from this row in the database.
			long rowId = cursor.getLong(cursor.getColumnIndex("_id"));
			return true;

Replacing the similar lines in the class with this method allowed me to display the list of items from the database and drag them around and click the red X to delete them. However, I wanted to be able to swipe to delete, put the drag handle on the right and get rid of the red X. I ended up doing a straight swap for some of the layout files (in

  • Used warp_main.xml instead of cursor_main.xml in order to get swipe to remove working:
  • Changed the layout file for the actual details view from list_item_click_remove.xml to list_item_handle_right.xml in order to move the drag handle to the right of the screen:
adapter = new MAdapter(this,
        R.layout.list_item_handle_right, null, cols, ids, 0);

After those changes, I had the desired look and actions setup. Now all I needed to do was get the changes to actually save in the database. In order to do that I first came up with my own way, but then Carl set me straight and I used the built-in DragSortCursorAdapter methods. I added the following persistChanges method to the MAdapter class in order to create a method that I could use to save the changes (here’s a snippet):

private class MAdapter extends SimpleDragSortListAdapter {
    // ...

    public void persistChanges() {
        Cursor c = getCursor();
        while (c.moveToNext()) {
            int listPos = getListPosition(c.getPosition());
            if (listPos == DragSortListAdapter.REMOVED) {
            } else if (listPos != c.getPosition()) {
                dbAdapter.updateItemPosition(c.getInt(c.getColumnIndex("_id")), listPos);

I thought I was doing really well, but I wasn’t sure where I should call the above method to get it to actually save the data correctly. Carl said that I should call it at the activity level and suggested that I put it in the onPause() method. DUH! Made sense to me. Here’s what Carl suggested:

protected void onPause() {

Yeah! Now I had a working example that would successfully save the changes whenever the back button was pressed. Saving the changes in the onPause() method might not be ideal, so feel free to play around with where you call it so it works best for your application.

The above code is just to illustrate the basic steps to wire up DSLV to work with a database. I put together a more comprehensive demo app that implements what’s talked about above using a SQLite database. The app allows you to add/edit/remove/sor items to experiment with DragSortListView. You can download it from GitHub and play around with it. The app uses ActionBarSherlock, so you’ll have to download it as well as the DragSortListView library and make sure your project is configured correctly to use these libraries.

Hopefully this helps make implementing Drag and Sort ListViews easier for you.

vmware: where do I start?

My first real work experience with vmware was a project that I was assigned to virtualize a remote data center and move it to our main data center. I was tasked to design and build the infrastructure at our main location and to help those at the remote location P2V the servers there and get them to the main data center. I was really excited because I had always wanted to learn more about vmware. So, now I know what I need to do but where do I start? What do I do? Where can I find what I need?

This post is a quick reference for those that are getting started. Hopefully it will help you find the resources you need to be successful in designing, building, testing, maintaining and troubleshooting your infrastructure.

The first place to start is vmware’s website. It’s not easy to find stuff, but start with the documentation section and then download and read as much as you can about the version that you are working with. Click on Support and Downloads on the top and then click “Documentation”. Once there, look under the “Server Virtualization” section for the version you want, for example, ESX 4.1 Download and read the

Hardware compatability guide:

Technical resources for virtual networking:

However, you might want to start with the following. Don’t get tripped up on the docs being from ESX 3, the concepts and recommendations are stil relevant to current versions (and vmware hasn’t created any updated docs).


vmware Infrastructure 3 in a Cisco Network Environment:

Technical Papers:

Interpreting esxtop statistics:

Duncan Epping

Twitter – I was hesitant to get started with Twitter for a long time, mostly because I didn’t see the value of it. However, I just started using it recently and have found a wealth of information about vmware. The trick is knowing who to follow. Here are some that I follow:

Duncan Epping

Eric Sloof

Scott Drummond

Vmware resources
I found one site that has a list of a lot of the top VMware blogs and sites, you can find it here:
Definitely check ou the first 5-10 sites unter the “Top 25 Blogs” section.
VMware’s site has a lot of good stuff, but it’s kind of hard to find simetimes. There are some really cool new things happening with CPU and memory management in 4.1. Here are some links to some of the newest info that you might want to check out:
From the above link:
Some cool tools:

How to Root and Install Android 2.2 (Froyo) and Flash 10.1 on the HTC Droid Incredible

****** If you brick your phone it’s not my fault and I can’t help you!!!
…just needs to be said. 🙂 ******

Special thanks to all the people who’s sites I used to get this put together!

All I have to say is, “WOW! Android 2.2 (Froyo) with Flash 10.1 on the HTC Droid Incredible is now truly INCREDIBLE!” I could go on, but I’ll just let you get started and you’ll find out all the cool stuff about it soon enough!

Final setup consists of the following:

  • Sky Raider 2.5.2 with Flash 10.1 and HTC’s Sense UI
  • Titanium Backup with BusyBox

So August 18th came and went and I, just like thousands of others, was disappointed that there was no Android 2.2 (Froyo) love for the HTC Droid Incredible! I was holding out since I didn’t really want to root my phone if an official update was available (I had never rooted an Android phone before…but that wasn’t going to stop me ;)).  However, since HTC had recently released the source code for Froyo for the HTC EVO 4G and the Droid Incredible I figured that by now someone should have something cooked up from it for the Incredible. So, I started digging and I found everything I needed to get a pretty bug free version of Froyo with Flash 10.1 up and running on my Droid Incredible. Here’s a brief overview of what I needed to do in order to get it all setup (with links to where I got my info):

  • Update the radio baseband (info here and here)
  • Root my phone using unrevoked3 (info here)
  • Do a nandroid backup
  • Unlock NAND using unrevoked forever (info here and here)
  • Install backup software (Titanium Backup (please donate) and BusyBox)
  • Backup everything up
  • Wipe everything
  • Install Sky Raider 2.5.2 with Flash 10.1 and HTC’s Sense UI (info here)
  • Restore apps/settings and extra stuff

Even though I did do some research before starting this, I did run into a couple quirks that took me a little extra time to figure out. Or, maybe I was just a little too anxious to get this done so I could enjoy it. 🙂 Anyway, I’ve tried to put together instructions that are pretty easy to follow and all in one place. Hopefully you can get your phone rooted and running Andorid 2.2 (Froyo), with Flash 10.1 in no time. I would recommend reading through everything first though, just to make sure you understand what’s going on. After I put this together I ran through it, using my phone, a couple times and it worked without any problems. Hopefully it goes well for you too! Enjoy!

Continue reading

Hacking the Arras Theme

First off, I have to say that I love the Arras Theme and think it’s the coolest one out there. The other day I was adding some content to my site and I hadn’t upgraded to WordPress 3.0 yet so I decided to do the upgrade. I usually like to upgrade all the plugins and themes that have upgrades available before I upgrade WordPress just to make sure things are compatible. However, after upgrading WordPress and the Arras Theme I found that things didn’t quite look the way they did before the upgrades. Some of my issues were because I didn’t bother to check theme settings or save theme files that I had modified before I updated the theme. In my defense, I must say it had been a long time since I had setup the theme and had pretty much forgotten what I had done to customize it (yeah, it’s a lame defense ;)).  Anyway, here’s a list of what was different after the upgrades:

  • PHP errors on page because it was using PHP4, not PHP5
  • Colors were different
  • Links for pages across the top (Home, Resume, etc.) were missing
  • Thumbnails were not displaying in the actual posts
  • No picture in the header

Some of these were pretty obvious, but I’ll go through each one so I can save myself time the next time I need to do this. 🙂

Continue reading

WordPress Upgrade Woes

It seems that every time I try to upgrade my WordPress site or any of the plugins, sometimes it hangs at downloading the file. I just tried to upgrade one plugin now and it didn’t work. I did a quick search and then remembered what I had done in the past (thanks to this post).

To fix the problem with the plugins, DISABLE ALL PLUGINS and then ONLY ENABLE the PLUGIN you are UPGRADING. This has worked for me every time…knock on wood. 🙂

Now, for the upgrade of the site. I thought it was cool that WordPress finally built in an autoupgrade feature, but I haven’t been able to get that to work most of the time. What has worked for me is this:

  • Download and install the “WordPress Automatic Upgrade” plugin (search for it from the Plugins page or you can visit the plugin site). Disable all other plugins if you have problems installing this one.
  • Disable all other plugins except the “WordPress Automatic Upgrade” plugin.
  • Once installed and activated, you should then see a ribbon at the top of the admin pages that says something like “Click Here to Automatically Upgrade WordPress to latest Version x.x.x”. Click on the link it provides and follow the instructions.
  • Note: I’m not sure if this is necessary, but I’ve also set the theme to the default WP theme before upgrading. If you have problems you might want to try this too.

I’ve used the WordPress Automatic Upgrade plugin since before WordPress built that functionality into the product and I’ve never had any problems with it, as long as I’ve followed the steps I mention above. I also like that it backups up your files and the database as part of the process (just don’t forget to download them…just in case).

Anyway, this is mostly just a note for me since I’m sure I’ll run into this again sometime and won’t remember what I did to fix it. However, it just might help someone else and that’s fine by me. 🙂


Avatar’s in WordPress

So a couple weeks ago I was trying to figure out how to add a picture to my profile so it would show up next to my comments. Well, I didn’t try very hard to figure it out and thought I’d look into it another today. Today is that day. I did a little digging and found that it was super easy. WordPress is now integrated with Gravitar and it’s super easy to create a Globally Registered avatar.

To creat one, head over to and sign up for an account. All you need is your email address and a picture. Once you sign up you can upload a picture, crop it after it’s uploaded and ta-da! you now have a Gravatar that appears anywhere you post something on the Internet that supports Gravatars (WordPress is one application that does). You can upload multiple pictues and change it whenever you want. It’s that easy!

So, what are you waiting for?

© 2020 Jason McReynolds

Theme by Anders NorénUp ↑